IECS Version History
Home Up Feedback Search

Products
Order
Downloads
Support
Articles & Tips
Recommended Links
About

 
 

 
Other Links:
Delphi CodeSmith Blog  

This page contains the version history for the Inference Engine Component Suite.  The latest patches and updates are available on our Support Page.

Note: THE IECS uses the Fuzzy Logic Component Library and the RiverSoftAVG Common Classes Library.  Please see the FLCL Version History and RCCL Version History for additional details.

-------------------------------------------------------------------
November 19, 2023     Version 7.3
        - Updated for RAD Studio 12 Athens Support


-------------------------------------------------------------------
July 23, 2023         Version 7.2.1
        - Updated for RAD Studio 11.3 Alexandria Support


-------------------------------------------------------------------
September 19, 2021    Version 7.2
        - Updated for RAD Studio 11 Alexandria Support


-------------------------------------------------------------------
June 10, 2020         Version 7.1.1
        - Updated for RAD Studio 10.4 Sydney Support
        - Changed {$IFDEF NEXTGEN}[Weak] to {$IFDEF AUTOREFCOUNT}[Weak]
        - Added Contnrs if NEXTGEN is not defined to remove compiler hints


-------------------------------------------------------------------
November 25, 2018     Version 7.1
        - Updated for RAD Studio 10.3 Rio Support


-------------------------------------------------------------------
January 27, 2018      Version 7.0.2
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
August 13, 2017      Version 7.0.1
        - Recompiled for RAD Studio 10.2.1 Tokyo Support


-------------------------------------------------------------------
April 2, 2017        Version 7.0
        - Added RAD Studio 10.2 Tokyo Support
        - Added Linux Support
        - Added Linux Console Demo Application


-------------------------------------------------------------------
February 20, 2017    Version 6.1.5
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
January 8, 2017      Version 6.1.4
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
November 6, 2016     Version 6.1.3
        - Updated unit namespace documentation for IECS units


-------------------------------------------------------------------
October 9, 2016      Version 6.1.2
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
September 5, 2016    Version 6.1.1
        - Recompiled because of RiverSoftAVG Charting Component Suite Changes


-------------------------------------------------------------------
July 24, 2016        Version 6.1
        - Reduced size of installer by removing RiverSoftAVG Common Classes Library
        - Reduced size of installer by removing Fuzzy Logic Component Library
        - Updated installer to download RivSerSoftAVG Common Classes Library as needed
        - Updated installer to download Fuzzy Logic Component Library,
          decrypt it and install as needed
        - Updated installer creation procedure to automatically generate
          version numbers and be encrypted


-------------------------------------------------------------------
June 5, 2016         Version 6.0.2
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
May 22, 2016         Version 6.0.1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
April 24, 2016       Version 6.0
        - Added RAD Studio 10.1 Berlin Support
        - Removed Directory Exists warning from installer
        - Modified TInputBoxFMXFunction.Call method to use TDialogServiceSync
          in 10.1+
        - Modified TInputQueryFMXFunction.Call method to use TDialogServiceSync
          in 10.1+
        - Modified TMessageDlgFMXFunction.Call method to use TDialogServiceSync
          in 10.1+
        - Disabled TInputBoxFMXFunction for ANDROID
        - Disabled TInputQueryFMXFunction for ANDROID
        - Disabled TMessageDlgFMXFunction for ANDROID
        - Modified TIEConsoleDlg.FindText method to use
          TDialogServiceSync.MessageDialog method in 10.1 Berlin
        - Modified TIEConsoleDlg.InferenceEngine1ReadLine method to use
          TDialogServiceSync.InputQuery method in 10.1 Berlin
        - Modified TIEConsoleDlg.InferenceEngine1ReadToken method to use
          TDialogServiceSync.InputQuery method in 10.1 Berlin
        - Fixed bug in TIEConsoleDlg.ceSearchKeyUp method where carriage
          return would not be recognized
        - Fixed row index out of bounds error in TValueEditDlg.sgValuesMouseDown
          method (FMX)
        - Modified TModulesEditDlg.miRenameClick method to use
          TDialogServiceSync.InputQuery method in 10.1 Berlin
        - Changed Search Box from TClearingEdit to TEdit in RuleEditorForm


-------------------------------------------------------------------
March 13, 2016       Version 5.9.6
        - Fixed Controls being grayed out in Delphi Palette when target was iOS 64-bit


-------------------------------------------------------------------
March 5, 2016        Version 5.9.5
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
February 5, 2016     Version 5.9.4
        - Recompiled because of RiverSoftAVG Common Classes Library Changes
        - Recompiled for Delphi 10 Seattle Update 1


-------------------------------------------------------------------
January 10, 2016     Version 5.9.3
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
December 6, 2015     Version 5.9.2
        - Recompiled because of RiverSoftAVG Common Classes Library Changes
        - Fixed bug in installer which would not set the library path correctly
           for iOS64 in XE8+


-------------------------------------------------------------------
November 16, 2015    Version 5.9.1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
September 6, 2015    Version 5.9
        - Added RAD Studio 10 Seattle Support
        - Added Winapi.Windows (instead of just Windows) to uses clause
          to correctly compile in RX 10 Seattle
        - Changed assignment to tsModules.FullSize to use TBehaviorBoolean
          type introducted in Delphi 10 Seattle (FMX.RS.RuleEditorForm.pas)
        - Changed assignment to tsModules.FullSize to use TBehaviorBoolean
          type introducted in Delphi 10 Seattle (FMX.RS.FactTemplateEditorForm.pas)
        - Changed assignment to tsModules.FullSize to use TBehaviorBoolean
          type introducted in Delphi 10 Seattle (FMX.RS.FactEditorForm.pas)


-------------------------------------------------------------------
June 14, 2015        Version 5.8.3
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
May 17, 2015         Version 5.8.2
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
May 3, 2015          Version 5.8.1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
April 19, 2015       Version 5.8
        - Added RAD Studio XE8 Support
        - Renamed IEInterfaces to IECSInterfaces because of collision with new
          System.Win.IEInterfaces unit
        - Changed uses unit from IEInterfaces to new name, IECSInterfaces
        - Added reference to FMX.Memo.Types in FMX.RS.RuleEditorForm for Delphi XE8+
        - Modified GetPointPosition function in FMX.RS.RuleEditorForm to return the current caret position
          in Delphi XE8+.  This is not a correct value but Delphi XE8+ does
          not seem to expose the routines needed to figure out the correct value


-------------------------------------------------------------------
February 15, 2015    Version 5.7
       - Includes new RiverSoftAVG Charting Component Suite v6.0
       - Recompiled because of Fuzzy Logic Component Library Changes and
         RiverSoftAVG Common Classes Library Changes
          NOTE: The Fuzzy Unit Compatibility Index was fixed.  Fuzzy demos
          that scaled the fuzzy result by the compatibility index will have
          different final values


-------------------------------------------------------------------
January 04, 2015     Version 5.6
        - Upgraded Demo applications for more recent Delphi releases, which
          had a couple major problems:
               - When the project would be upgraded, the more recent Delphis
                 would mess up the name scoping, making it look like they
                 needed a recompile (not true), making it difficult for Evaluation users
                 Error: "Unit IESlotTest was compiled with a different version of FMX.RS.HelperFunctions.ClonePersistentClass"
               - DB demos were broken by a combination of "deprecated" (actually broken) TDataSet
                 methods and defmodule-introduced issues
        - Upgraded DB Demo applications to use TClientDataSet MyBase local 
          XML files, no longer requiring database configuraion
        - Upgraded DB Multiview demo to show inference engine output
        - Upgraded Fuzzy/Project Risk Assessment demo to chart individual risk factors
        - Added TInferenceEngine.IsRunning property
        - Fixed TIEValue.EqualsStar method to allow floating point values
          to equal with a same error
        - Fixed TIEValue.EqualsStar method to handle case where AValue is
          dtNone type
        - Fixed TIEValue.Equals method to allow floating point values
          to equal with a same error
        - Fixed TIEValue.Equals method to handle case where AValue is
          dtNone type
        - Added support for additional field types in
          TDBIESlot.GetFieldSlotTypes method
        - Added support for additional field types in
          TDBInferenceEngine.GetFieldSlotTypes method
        - Added support for additional field types in
          TDBInferenceEngine.GetFieldSlotValue method
        - Added support for additional field types in
          TDBInferenceEngine.SetFieldSlotValue method
        - Fixed parsing bug in TIEDataSet.CreateFact method where method
          would try to parse a blank string for a fact slot
        - Overrode in TIEDataSet the TDataSet.GetFieldData method introduced in XE4 that
          broke the code getting the field values from the TDBInferenceEngine fact
        - Overrode in TIEDataSet the TDataSet.SetFieldData method introduced in XE4 that
          broke the code changing the underlying TDBInferenceEngine fact


-------------------------------------------------------------------
December 28, 2014    Version 5.5.3
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
November 16, 2014     Version 5.5.2
        - Recompiled for RAD Studio XE7 Update 1


-------------------------------------------------------------------
September 22, 2014    Version 5.5.1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
September 7, 2014    Version 5.5
        - Added RAD Studio XE7 Support
        - Changed packages to use LibSuffix.inc exclusively (no more LibSuffix120.inc,
          LibSuffix130.inc, etc)
        - Changed TPropertyAnimationFunction to call TAnimator methods
          instead of TFMXObject methods for XE7+
        - Changed TAnimationFunction to call TAnimator methods
          instead of TFMXObject methods for XE7+
        - Moved GListBox.pas from \Commmon to \AI\IE (simplifies installation)
        - Moved GEdit.pas from \Commmon to \AI\IE (simplifies installation)
        - Moved RSPageControl.pas from \Commmon to \AI\IE (simplifies installation)
        - Moved EditBoxes.dpk from \Commmon to \AI\IE (simplifies installation)


-------------------------------------------------------------------
July 6, 2014         Version 5.4
        - Added Appmethod (Object Pascal) Support
        - Recompiled for Delphi XE6 Update 1
        - Recompiled because of RiverSoftAVG Common Classes Library Changes
        - Fixed the memo line carriage returns in IE Expert System Wizard
        - Reloaded IEExpertSystemWizardForm to reset the TIEPatternSlotItem.Equal property
         (used to be called Equals)
        - Fixed Define Terms Wizard Frame so that buttons are only enabled
          when needed
        - Turned off deprecated warnings from VCL for IEDataSet.pas
        - Turned off deprecated warnings from VCL for DBInferenceEngine.pas


-------------------------------------------------------------------
June 8, 2014         Version 5.3.2
        - Changed TDirectory.GetCurrentDirectory calls to GetCurrentDir
          calls as the former cause errors on OSX (XE4+) or crashed the
          OSX compiler (XE2 and XE3)
        - Fixed bug in FMX.RS.ConsoleEditorForm IEAddActivation and
          IERemoveActivation methods which would occur if tsModules.TabIndex = -1
        - Update Basic Console Demo
        - Added Basic Console (FMX) Demo


-------------------------------------------------------------------
May 26, 2014         Version 5.3.1
        - Fixed StandardPackage.pas uses statement for MACOS (uses MacAPI.Foundation)
        - Included RSGenerics.Collections in FactEditorForm to get rid of hints
        - Included RSGenerics.Collections in FactTemplateEditorForm to get rid of hints
        - Included RSGenerics.Collections in FMX.RS.FactEditorForm to get rid of hints
        - Included RSGenerics.Collections in FMX.RS.FactTemplateEditorForm to get rid of hints
        - Included RSGenerics.Collections in FMX.RS.ModuleEditorForm to get rid of hints
        - Included RSGenerics.Collections in FMX.RS.RuleEditorForm to get rid of hints
        - Included RSGenerics.Collections in FMX.RS.TypeEditorForm to get rid of hints
        - Included RSGenerics.Collections in FMX.RS.TypeEditorFrame to get rid of hints
        - Included RSGenerics.Collections in IEModule to get rid of hints
        - Included RSGenerics.Collections in ModuleEditorForm to get rid of hints
        - Included RSGenerics.Collections in RuleEditorForm to get rid of hints
        - Included RSGenerics.Collections in TypeEditorForm to get rid of hints
        - Included RSGenerics.Collections in TypeEditorFrame to get rid of hints
        - Included RSGenerics.Collections in ValueEditorForm to get rid of hints


-------------------------------------------------------------------
April 27, 2014       Version 5.3
        - Added RAD Studio XE6 Support
        - ************************
          Temporarily disabled mmOutput.GoToTextEnd statement in
          TIEConsoleDlg.InferenceEngine1PrintOut method for XE6 as it
          causes access violations (FMX.RS.ConsoleEditorForm)
          ************************
        - Fixed Cut, Copy, and Paste for XE4+ by turning off shortcuts
          for menu items: miCut, miCopy, and miPaste (FMX.RS.ConsoleEditorForm)
        - Fixed mmOutput.Font not being set to 'Courier New' in XE4+ because
          of mmOutput.StyledSettings property (FMX.RS.ConsoleEditorForm)
        - Changed tsModules.FullSize to True for XE6 as it will hide tabs
          if there are too many to show (FMX.RS.*Form)
        - Removed TTabItem.Position.Point properties in DFM as XE6 will
          not handle gracefully (FMX.RS.*Form)
        - Changed lbFunctions.DragMode to dmManual because behavior changes
          across various versions of Delphi (FMX.RS.RuleEditorForm)
        - Fixed FMX.RS.RuleEditorForm bug to show new rule on panel
          opening if there are no rules in the inference engine
        - Fixed access violation in eEditChangeTracking event where
          EditListBox is nil (FMX.RS.RuleEditorForm)
        - Fixed splitter between rules tree and tab control containing
          fact templates and functions listboxes (FMX.RS.RuleEditorForm)
        - Fixed access violation in TFactsEditDlg.UpdateMemo method when
          CurrentFact is nil


-------------------------------------------------------------------
March 30, 2014       Version 5.2.2
        - Recompiled because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
February 9, 2014     Version 5.2.1
        - Updated because of RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
January 19, 2014     Version 5.2
        - Recompiled for RiverSoftAVG Common Classes Library Changes


-------------------------------------------------------------------
September 22, 2013     Version 5.1
        - Added RAD Studio XE5 Support
        - Added Android Support
        - Validated library on physical Android Device
        - Moved AddChildTreeViewItem functions from FMX.RS.IEHelperFunctions to
          FMX.RS.HelperFunctions
        - Moved vx_XXX constants from FMX.RS.IEHelperFunctions to
          FMX.RS.HelperFunctions
        - Added FMX.Graphics to uses clause for XE5+


-------------------------------------------------------------------
August 25, 2013     Version 5.0.1
        - Added ComponentPlatformsAttribute to TRule so that it can be
          added at design-time to all target platforms
        - Added missing *.inc files to installer so that components can be 
          built


-------------------------------------------------------------------
August 18, 2013     Version 5.0
        - Validated library on physical iOS Device
        - Changed code to call DisposeOf on AUTOREFCOUNT, not NEXTGEN
        - Fixed workaround for nasty, subtle bug in Embarcadero's iOS
          device compiler (not iOSSimulator) which would fail with a
          backend error (and no line number to find cause).  It was caused
          by the IFactTemplate.GetOwner method signature mapping to a DYNAMIC
          method.  Added GetAOwner method and mapped IFactTemplate.GetOwner = GetAOwner
        - Changed TFactSlot.Equals method to match TObject.Equals method
          signature
        - Changed TFactTemplate.Equals method to match TObject.Equals method
          signature
        - Changed TFact.Equals method to match TObject.Equals method
          signature
        - Changed TFactTemplate.Owner property from TComponent to TPersistent
        - Changed TFactTemplate constructors to pass in TPersistent Owner
        - Fixed bug where RuleEditorForm (FMX) would not allow selection of
          rules because DragMode=dmAutomatic (behavior changed in XE4)
        - Fixed bug in RuleEditorForm where you could not drag and drop
          the first pattern in the rule


-------------------------------------------------------------------
July 29, 2013     Version 5.0B1
        - Modified TActivationAgenda to use TStringList<TActivation>
          for XE+ (had been turned off because to TStringList<T> bug)
        - Replaced Free calls with DisposeOf for NEXTGEN compiler
        - Changed TFMXxxxDialog ComponentPlatformsAttribute to pidRS_DESKTOP_SUPPORT

        Known Bugs:
        - FMX.RS.RuleEditorForm cannot select rule from treeview in XE4

Note: This release dramatically changed support classes in order to
      better support XE4 Mobile compiler features: Automatic Reference Counting,
      TList deprecation, and suggested deprecation of Pointer type. It makes
      heavy use of generics instead of older TList-type and TGHashTable classes
      which used pointers.  A lot of effort has gone into making the new classes
      support the same methods and properties of the old classes.  However,
      there may be changes needed to be made to your code.  Of special note:
        - InterfaceCollections unit has been replaced with RSInterfaceCollections unit
        - Contnrs.pas, GLists.pas, and GHashTable.pas have been replaced with
          System.Generics.Collections.pas or RSGenerics.Collections.pas

      The old units are still available but are not used.


-------------------------------------------------------------------
July 21, 2013     Version 5.0B0
        - Added RAD Studio XE4 Support
        - Added iOS Support
        - Added 32 New IECS Functions (OS, Directory, and File functions)
        - Dropped RAD Studio 2009 Support
        - Deprecated IEDataset.pas
        - Refactored classes to use generics versions of lists and hash tables instead
          of classes from Contnrs.pas, GLists.pas, InterfaceCollections.pas,
          Structures.pas, and GHashTable.pas
        - Refactored Packages (dpk) to use $IFDEFs with $LIBVERSION
          to create multiple compiled versions for each version of Delphi
          from the same package file
        - Replaced Free calls with DisposeOf for NEXTGEN compiler
        - Removed Free calls for NEXTGEN compiler
        - Added IECS Execute Mobile Demo App
        - Added TDirectoryFunction, adds
            get-current-dir, set-current-dir, get-files
            get-dirs, get-parent-dir, get-root-dir
            is-dir-empty, is-dir-exists, create-dir
            copy-dir, move-dir, delete-dir
            dir-delim
        - Added TOSVersionFunction, adds
            get-os-name, get-os-architecture, get-os-platform
            get-os-build-version, get-os-major-version, get-os-minor-version
        - Added TFileFunction, adds
            is-file-exists, copy-file, delete-file
            move-file, rename-file, get-file-ext
            get-filename, get-file-path, change-file-ext
            change-file-path
        - Added TPathFunction, adds get-home-path, get-documents-path,
          and get-temp-path
        - Added [Weak] Attribute to owner objects references for
          Automatic Reference Counting (ARC) compiler
        - Changed TIEDefinedTypes class to descend from TRSStringHashTable<IIEDefinedType>
        - Removed TIEDefinedTypesEnumerator class
        - Added TFactsCache type (TRSHashTable<Integer, IFact>)
        - Modified TFacts class to use TFactsCache type
        - Removed TFactsEnumerator class
        - Removed TModulesEnumerator class
        - Modified TFactSetsEnumerator class to descend from
          TRSObjectListEnumerator<TComponent> for NEXTGEN compiler
        - Changed TFactSets to descend from TRSComponentList
        - Removed TRulesEnumerator class
        - Changed TRules class to descend from TRSStringObjectHashTable<TRule>
        - Removed TIOStreamsEnumerator class
        - Changed TIOStreams class to descend from TRSStringObjectHashTable<TGTextStream>
        - Removed TUserFunctionsEnumerator class
        - Changed TUserFunctions class to descend from TRSStringHashTable<IUserFunction>
        - Added TInferenceEngine.AddDefaultFuzzyTerms protected method
        - Changed TInferenceEngine.ReloadComps protected property to
          TRSComponentList type
        - Modified TInferenceEngine.ParseRulePatterns method signature to use
          TIEParserVariables type
        - Modified TInferenceEngine.ParseRuleActions method signature to use
          TIEParserVariables type
        - Fixed bug in TUserFunctions.Clear method, which could skip
          user functions on clear.  This occurred because removing a
          user function while iterating over the hash table screwed up
          the enumeration.
        - Fixed bug in TFactTemplates.Clear(TConstructScope) method, which could skip
          user functions on clear.  This occurred because removing a
          user function while iterating over the hash table screwed up
          the enumeration.
        - Fixed bug in TInferenceEngine.RemoveDependencies(IFactTemplate) method where
          removing dependent fact templates could be skipped.  This occurred
          because removing a fact template while iterating over the hash
          table screwed up the enumeration.
        - Fixed bug in TIEDefinedTypes.Clear(TConstructScope) method, which could skip
          defined types on clear.  This occurred because removing a
          defined type while iterating over the hash table screwed up
          the enumeration.
        - Fixed bug in TInferenceEngine.RemoveTypeDependencies method where
          removing dependent defined types could be skipped.  This occurred
          because removing a defined type while iterating over the hash
          table screwed up the enumeration.
        - Fixed bug where TInferenceEngine.Destroy was not nil'ing
          module structures after all of the modules have been freed
        - Changed TIEDefinedType.ConstraintIntegers property type to TList<Integer>
        - Fixed TGetPropertiesFunction.Call method to compile with NEXTGEN compiler
        - Modified TPlotFuzzySetFunction.Call method to NOT use AnsiStrings
          and AnsiChars
        - Modified TIEToken reference count code for NEXTGEN compiler
        - Changed TIETokenTree.Buckets protected property type to
          TObjectList<TInterfaceList>
        - Changed TFactsHashTable to descend from TRSHashTable<Integer,IFact>
        - Changed TDBInferenceEngine component attributes to specify Vcl
          support only (pidRS_WINDOWS_SUPPORT)
        - Refixed (doh) code for TIEDataSet string fields
        - Added FMX.StdCtrls to Dialogs uses clause for XE4+
        - Added TIModuleImportList = TList<IModuleImport> type
        - Changed TModule to use TIModuleImportList type
        - Added TModuleList = TList<IModule> type
        - Changed TModuleConstruct to use TModuleList type
        - Added [Weak] Attribute to owner objects references for
          Automatic Reference Counting (ARC) compiler
        - Modified TModuleConstruct reference count code for NEXTGEN compiler
        - Modified TModule reference count code for NEXTGEN compiler
        - Modified TModuleImportExport reference count code for NEXTGEN compiler
        - Changed TBindings to descend from TRSStringObjectHashTable<TBinding>
        - Removed TBindingsEnumerator class
        - Changed TRulePatternList type to descend from TObjectList<TIEPattern>
        - Changed TRuleActionList type to descend from TRSAssignList<IFunCall>
        - Added TRuleBindingsList type for TRule.FBindings field
        - Added [Weak] Attribute to owner objects references for
          Automatic Reference Counting (ARC) compiler
        - Removed TRuleActionListEnumerator class
        - Removed TRulePatternListEnumerator class
        - Updated AssignDefinedTypesToTreeView function for new generics
          TIEDefinedTypes
        - Updated AssignFactTemplatesToTreeView function for new generics
          TFactTemplates
        - Updated AssignRulesToTreeView function for new generics
          TRules
        - Changed TSlotTests type to descend from TObjectList<TIEPatternMatchTest>
        - Added TFactTemplateSlots class
        - Modified TFactTemplate to use TFactTemplateSlots class
        - Changed TFactValueHashtableEntry from a class to a record
        - Modified TFactValues to descend from TRSStringHashTable<TFactValueHashtableEntry>
        - Removed TFactValueHashtableEnumerator class
        - Modified TFact reference count code for NEXTGEN compiler
        - Modified TFactSlot reference count code for NEXTGEN compiler
        - Added TIEPatternTests type
          {$IFDEF XE+}TStringList<Integer>{$ELSE}TGStringList{$ENDIF}
        - Changed TIEPattern.Tests property to use TIEPatternTests type
        - Modified TDBIEBookmark reference count code for NEXTGEN compiler
        - Changed TDBInferenceEngine component attributes to specify Vcl
          support only (pidRS_WINDOWS_SUPPORT)
        - Removed TDataSetListEnumerator class
        - Changed TDataSetList to descend from TList<TDataSet>
        - Changed TDBInferenceEngine.FactBookmarks property type to
          TRSHashTable<Integer,IDBIEBookmark>
        - Added {$IFDEFs} in StandardPackage.pas to include units (usually WinAPI.Windows) to
          remove compiler hints
        - Changed TIETokenizerStream.PutBackToken method signature to
          pass interface by const
        - Modified TIEStreamToken reference count code for NEXTGEN compiler
        - Added TIEParserVariables type (TRSStringHashTable<Integer>)
        - Modified TIEParser.ParseRulePatterns method signature to use
          TIEParserVariables type
        - Modified TIEParser.ParseRuleActions method signature to use
          TIEParserVariables type
        - Modified TIEParser.ParsePattern method signature to use
          TIEParserVariables type
        - Changed CharInSet expressions to use RSCharInSet to avoid deprecation
          warnings from XE4+
        - Changed TIEClipsStream.PutBackToken method signature to
          pass interface by const
        - Added TIStreamTokenStack = TStack<IStreamToken> type
        - Replaced use of TIStack with TIStreamTokenStack in IEClipsParser unit
        - Added TSlotFunctionsStrings type
          {$IFDEF DELPHI15PLUS}TStringList<TSlotArgRecord>{$ELSE}TGStringList{$ENDIF}
        - Changed TIEClipsParser.SlotFunctions property to use
          TSlotFunctionStrings type
        - Modified TIEClipsParser.ParseRulePatterns method signature to use
          TIEParserVariables type
        - Modified TIEClipsParser.ParseRuleActions method signature to use
          TIEParserVariables type
        - Modified TIEClipsParser.ParsePattern method signature to use
          TIEParserVariables type
        - Changed name TIEPatternSlotItem.Equals property to Equal to
          avoid collisions with TObject.Equals method
        - Modified TIEESRuleItem.AssignTo method signature to use
          TIEParserVariables type
        - Changed TBaseReasonerList type to descend from TRSAssignList<IReasoner>
        - Changed TUserFunctionList type to descend from TRSAssignList<IUserFunction>
        - Changed TFunctionCall.Arguments type to TList<IIEValue>
        - Removed TBaseReasonerListEnumerator class
        - Removed TUserFunctionListEnumerator class
        - Modified TFunctionCall reference count code for NEXTGEN compiler
        - Modified TIEUserFunctionCall reference count code for NEXTGEN compiler
        - Changed TValueHashTable class to descend from TRSStringHashTable<IIEValue>
        - Changed TIEValue.ToString from property to method to get rid of
          compiler warnings
        - Modified TIEValueRec to support AUTOREFCOUNT for TObjects, required
          moving the VObject: TObject outside of the variant section of
          the record
        - Modified TIEValueRec to support AUTOREFCOUNT for IInterfaces, required
          moving the VInterface: IInterface outside of the variant section of
          the record (EXPERIMENT TO SEE IF IMPROVES iOS SUPPORT)
        - Modified TIEValue reference count code for NEXTGEN compiler
        - Modified TSingletonsVector reference count code for NEXTGEN compiler
        - Changed TValueVectorEnumerator class to descend from
          TInterfaceListIterator
        - Removed TValueHashTableEnumerator class
        - Modified TActivationAgenda to descend from TStringList<TActivation>
          for XE+ (SET USING FLAG FOR NOW IN ORDER TO FIND BUG)
        - Deleted TActivationAgendaEnumerator class for XE+
        - Added TReteNodes (TList<TReteNode>) type
        - Changed code in TReteNetwork to use TReteNodes type
        - Added TActivations (TList<TActivation>) type
        - Changed code in TReteNetwork to use TActivations type
        - Added TTestNodeTests (TObjectList<TIESlotTest>) type
        - Changed code in TTestNode to use TTestNodeTests type
        - Added TRuleNodes (TRSDictionary<TRule, TReteNodes>) type
        - Changed code in TReteNetwork to use TRuleNodes type

        Known Bugs:
        - Using TActivationAgenda when it is descended from TStringList<TActivation>
          has bug with Project Risk.ie
        - FMX.RS.RuleEditorForm cannot select rule from treeview in XE4

Note: This release dramatically changed support classes in order to
      better support XE4 Mobile compiler features: Automatic Reference Counting,
      TList deprecation, and suggested deprecation of Pointer type. It makes
      heavy use of generics instead of older TList-type and TGHashTable classes
      which used pointers.  A lot of effort has gone into making the new classes
      support the same methods and properties of the old classes.  However,
      there may be changes needed to be made to your code.  Of special note:
        - InterfaceCollections unit has been replaced with RSInterfaceCollections unit
        - Contnrs.pas, GLists.pas, and GHashTable.pas have been replaced with
          System.Generics.Collections.pas or RSGenerics.Collections.pas

      The old units are still available but are not used.


-------------------------------------------------------------------
March 24, 2013     Version 4.1.1
        - Fixed parsing of mixed line ending (CR, LF, CR/LF) files in TIEClipsStream
          so that line numbers are correctly reported on errors
        - Fixed pattern matching bug where patterns such as (student Tom|Dan)
          would match ANY student (fixed in TIEPattern.FixTests)
        - Changed occurrences of #13#10 to use sLineBreak constant
        - Fixed bug in Advanced Console demo where MAIN module tab would
          not be selected automatically causing a List Index out of bounds
          error


-------------------------------------------------------------------
January 27, 2013     Version 4.1
        - Changed Evaluation version code allowing
          no restrictions, except only for VCL and FMX Win32/64 and
          displaying nag screen when Delphi is not running
        - Updated for Rad Studio XE3, Update 2
        - Fixed bug in TFactSetDialog where imported defined types and fact templates
          would be deleted/changed when defining facts (Thanks D.T.)
        - Removed TFactSetDialog.EnableModuleSwitch property as changing
          modules makes no sense when defining facts for a factset
        - Removed assignment to TFactSetDialog.EnableModuleSwitch property in
          TFactsProperty.Edit as this property was removed


-------------------------------------------------------------------
December 9, 2012     Version 4.0
        - Fixed bug in TInferenceEngine.RemoveDependencies where dependent facts
          were not being retracted
        - Fixed bug in TInferenceEngine.RemoveDependencies( IModule, IIEDefinedType )
          to properly delete the defined type from all modules' DefinedTypes hash table
        - Fixed bug in TInferenceEngine.RemoveDependencies( IFactTemplate )
          to properly delete the defined type from all modules' DefinedTypes hash table
        - Fixed bug in TFactTemplates.AssignLocal where imported
          fact templates were being deleted
        - Fixed bug in TIEDefinedTypes.AssignLocal where imported
          defined types were being deleted
        - Added TInferenceEngine.RemoveDependencies( IModule, IFactTemplate )
          protected method
        - Changed TInferenceEngine.RenameDefinedType method to ignore renames
          to deftypes not in the DefinedTypes hash table
        - Changed TInferenceEngine.RenameFactTemplate method to ignore renames
          to deftypes not in the DefinedTypes hash table
        - Added TFactTemplates.Clear( TConstructScope ) method
        - Added TIEDefinedTypes.Clear( TConstructScope ) method
        - Added TFacts.Clear( TConstructScope ) method
        - Changed Type Editor Form behavior so that only deftypes local
          to the module can be modified or deleted
        - Added TIETypesEditDlg.EnableNodes method
        - Fixed access violation in TIETypesEditDlg.ToggleFocus when
          ActiveControl is nil
        - Fixed bug in TIETypesEditDlg.actReplaceTypeExecute to replace
          type, not just delete and then re-add it
        - Changed Fact Template Editor Form behavior so that only fact templates local
          to the module can be modified or deleted
        - Added TFactTemplatesEditDlg.EnableNodes method
        - Fixed TFactTemplatesEditDlg.AddTypeAndValue method to convert
          integer slot default values to float if basetypes contains float
          (Thanks DT)
        - Added TConstructScope type
        - Added TConstructScopes type
        - Added DefType parameter to IReasoner.RenameDefinedType method
        - Added FactTemplate parameter IReasoner.RenameFactTemplate method
        - Fixed TModuleImportExport.ImportConstructs bug where a defined types,
          fact templates, and facts could be imported multiple times from
          different modules
        - Fixed bug in TRule.SetEngine method where a rule with the
          same name could accidentally be deleted from the
          TInferenceEngine.Rules property (Thanks DT)
        - Fixed bug in TFactTemplate.SetTemplateName method where template
          with new name would be removed (or attempted to)


-------------------------------------------------------------------
November 25, 2012     Version 4.0 EEP6
        - Massive Help File Updates including changing popup links to
          normal links and updated hierarchy topics
        - Added design-time context-sensitive help for IECS components when user 
          right-clicks the component and selects "Help..."
        - Added TGetHelpEditor component editor to display IECS component help
        - Changed TInferenceEngineEditor to descend from TGetHelpEditor.  Because
          TGetHelpEditor descends from TDefaultEditor, the behavior of the
          component editor for TRule when you double-click is to create an
          event handler instead of invoking context-menu
        - Changed TRuleEditor to descend from TGetHelpEditor.  Because
          TGetHelpEditor descends from TDefaultEditor, the behavior of the
          component editor for TRule when you double-click is to create an
          event handler instead of invoking context-menu
        - Added FMX.RS.IEPropertyEditors.pas unit
        - Added call to FMX.RS.IEPropertyEditors.Register in Register
          function
        - Added Documentation Insight to IEInterfaces.pas unit
        - Renamed IModule.AssignModuleParameters method to AssignModuleDefinition
        - Changed IModule.RemoveModule methods from procedures to functions
        - Changed IModuleSharedConstruct.RemoveModule method from procedures to function
        - Added IModule.GetExpertSystem method
        - Added Documentation Insight to InferencEngine.pas unit
        - Added TInferenceEngine.CurrentFocus property
        - Added TFacts.LocalsToString method
        - Added TFacts.LocalCount property
        - Added code to support Automatic Focusing of Modules on Rule Activation
        - Changed TInferenceEngine.GetExpertSystem method to use
          IModule.GetExpertSystem
        - Fixed bug in TFactTemplates.GenerateToString where if LocalsOnly
          was TRUE the first non-local fact template would keep the following
          fact templates from printing
        - Fixed bug in TIEDefinedTypes.AssignLocal method where the
          Defined Type would be assigned twice
        - Fixed bug in TIEDefinedTypes.Replace method which would incorrectly
          not decrement ImportCount property
        - Fixed bug in TFactTemplates.Replace method which would incorrectly
          not decrement ImportCount property
        - Modified TInferenceEngine.Loaded method to also reload TFactSets
        - Added Auto Focus Checkbox to Rule Editor (Vcl and FMX)
        - Fixed bug in Rule Editor (FMX) where Rules TreeView would not update when
          switching modules
        - Added TIEParser.FindConstructType method
        - Added TIEParser.GetConstructName abstract method
        - Added TIEParser.PrettyPrint( TParsedType ) abstract method
        - Added SFactSetComment, SDefTypeComment, etc resource strings
        - Added SXXXSyntax resource strings for construct
          (deftype, defrule, ...) types
        - Implemented TIEClipsParser.GetConstructName method which returns
          the name or label (e.g., deftype, defrule, etc) of a construct type
        - Implemented TIEClipsParser.PrettyPrint( TParsedType ) method which
          prints a syntax definition for the construct type
        - Modified TIEClipsParser.ParseRule method to support auto-focus
          "(declare (auto-focus TRUE))"
        - Modified PrettyPrint(TIERule) to output TIERule.AutoFocus property
        - Added WrapTextColumn variable
        - Fixed bug in TIEDefinedType.Assign(const AValue: IInterface)
          where constraint values kept doubling because original constraints
          were not cleared first (Thanks DT)
        - Fixed bugs in TFactSet where fact set could be added or removed from
          wrong module
        - Fixed bug in TFactSet where deleting TFactSet could cause access violation
        - Changed TFactSet.Loaded method to just call the TInferenceEngine.Reload method
        - Added TFactSet.Reload method to actually add the factset to the
          inference engine (called by TInferenceEngine.Loaded method)
        - Renamed TModule.AssignModuleParameters method to AssignModuleDefinition
        - Changed TModule.RemoveModule methods from procedures to functions
        - Changed TModuleConstruct.RemoveModule method from procedures to function
        - Added implementation of IModule.GetExpertSystem method
        - Added TRule.AutoFocus property
        - Fixed bugs in TRule where rule could be added or removed from
          wrong module
        - Modified TPrettyPrintFunction to pretty print construct types
          (deftype, deftemplate, defrule, etc) on ppdeffunction
        - Fixed syntax statement for TWatchFunction to include focus keyword
        - Fixed syntax statement for TUnwatchFunction to include focus keyword


-------------------------------------------------------------------
October 21, 2012     Version 4.0 EEP5
        - Added TFMXModulesDialog component
        - Added FMX.RS.ModuleEditorForm form for editing modules in FMX
        - Updated Demo applications
    - Added Cut, Copy, and Paste Menu Items to Module Editor (Vcl and FMX)
    - Added Cut, Copy, and Paste Menu Items to Type Editor (Vcl and FMX)
    - Added Cut, Copy, and Paste Menu Items to Facts Editor (Vcl and FMX)
    - Added Cut, Copy, and Paste Menu Items to Fact Templates Editor (Vcl and FMX)
    - Added Cut, Copy, and Paste Menu Items to Rules Editor (Vcl and FMX)
        - Added ability in Console Editor to double-click Rules, Fact Templates, and
          Facts Listboxes and display selected item in output memo
        - Added Modules Editor to Console Editor (Vcl and FMX)
        - Enabled Edit <STRUCT> menus in FMX.RS.ConsoleEditor
        - Changed ConsoleEditor to sort Fact Templates listbox
        - Changed ConsoleEditor to sort Rules listbox
        - Added OnClearModule event handler for Console Editor to clear listboxes
        - Added Comment Edit box for Module Editor
        - Added Rename Module Menu Item to Module Editor
        - Added TModulesProperty editor
        - Added Expand All and Collapse All menu items to FMX Rule Editor
        - Fixed bug where FMX.RS.RuleEditorForm would allow typing in
          invalid characters
        - Fixed bug where FMX.RS.RuleEditorForm Open and Save Dialogs would
          not list Rules *.ier files
        - Fixed bug where FMX.RS.TypeEditorFrame would allow typing in
          invalid characters
        - Changed behavior so that default component editor for TInferenceEngine
          is "Edit Expert System..."
        - Removed SubProperties attribute from DefinedTypes, FactTemplates,
          Modules, and Rules (subproperties won't show up in object inspector)
        - Fixed bug in TInferenceEngine.ReplaceTemplate method which would
          raise Index out of bounds exception
        - Fixed bug where a DefinedType would be reassigned to current module
          instead of parent module on Assign call
        - Modified TInferenceEngine.GetExpertSystem to print much smaller
          (and be more efficiently parsed) by having each module only
          print local fact templates, rules, etc and not printing module
          qualifiers
        - Added TIEDefinedTypes.ImportCount and LocalsCount properties
        - Added TIEDefinedTypes.LocalsToString public method (and
          GenerateToString(Boolean) protected method)
        - Added TFacts.ImportCount and LocalsCount properties
        - Added TFacts.LocalsToString public method (and
          GenerateToString(Boolean) protected method)
        - Added TFactSets.ImportCount and LocalsCount properties
        - Added TFactSets.LocalsToString public method (and
          GenerateToString(Boolean) protected method)
        - Added TRules.ImportCount and LocalsCount properties
        - Added TRules.LocalsToString public method (and
          GenerateToString(Boolean) protected method)
        - Added TFactTemplates.ImportCount and LocalsCount properties
        - Added TFactTemplates.LocalsToString public method (and
          GenerateToString(Boolean) protected method)
        - Added TInferenceEngine.ParseModule method
        - Added TInferenceEngine.ParseConstructType method
        - Added TInferenceEngine.OnParseModule event
        - Changed TInferenceEngine.Modules property from public to published
        - Changed TInferenceEngine to stream Modules and their constructs
          (DefinedTypes, Fact Templates, Rules, Facts, etc) as a hidden
          ModuleText Defined Property
        - Added TInferenceEngine.Reload method to allow TComponents to allow
          the inference engine to reload TComponents that were loaded before
          it was loaded
        - Changed TInferenceEngine.DefinedTypes property to no longer be streamed
        - Changed TInferenceEngine.FactTemplates property to no longer be streamed
        - Changed TInferenceEngine.Rules property to no longer be streamed
        - Added TIEDefinedTypes.FindUnsharedType method to find out if
          FactTemplate contains any types not shared by module
        - Fixed bug where using TInferenceEngine.Modules.Add method would
          not properly prepare module for use
        - Fixed bug in TModules.Assign where MAIN module would not properly
          export constructs
        - Added TIEParser.AutoRenameCopy property which controls whether
          the Parser should try and keep rename the Parsed header until
          a unique name is found (default=false).  This property is useful
          for copy and paste of a structure and not having to worry about
          the name
        - Added TIEParser.IgnoreModuleQualifier property which controls
          whether the parser ignores the domain qualifier or not
        - Added TIEParser.PrintModuleQualifiers property which controls
          whether the module qualifier is output when a construct is
          pretty printed
        - Added TIEParser.GetConstructType abstract methods
        - Implemented AutoRenameCopy property in TIEClipsParser.ParseHeader
          methods.  AutoRenameCopy property controls whether
          the Parser should try and keep rename the Parsed header until
          a unique name is found (default=false).  This property is useful
          for copy and paste of a structure and not having to worry about
          the name
        - Implemented IgnoreModuleQualifier property in TIEClipsParser.ParseHeader,
          which controls whether the parser ignores the domain qualifier or not
        - Implemented PrintModuleQualifiers property in TIEClipsParser, which controls
          whether the module qualifier is output when a construct is
          pretty printed
        - Added TIEClipsParser.RenameCopy protected method
        - Added TIEClipsParser.GetConstructType method
        - Added SFactSetKeyword, SFuzzyTermKeyword, SDefinedTypeKeyword,
          SFactTemplateKeyword, SModuleKeyword, SRuleKeyword,
          SUserFunctionKeyword, and SDefGlobalKeyword resourcestrings
        - Added vaEditModules to TValidAction
        - Added SModuleMAINReserved resource string
        - Added SUnsharedFactTemplateType resource string
        - Fixed bug in TModule.SetName method that would allow MAIN module
          to be renamed or another module to be named MAIN
        - Changed TRule.Loaded method to just call the TInferenceEngine.Reload method
        - Added TRule.Reload method to actually add the rule to the
          inference engine (called by TInferenceEngine.Loaded method)
        - Added CreditAssessment-Standalone.ie to Demos\Scripts
        - Added CreditAssessment-Modules.ie to Demos\Scripts


-------------------------------------------------------------------
October 8, 2012     Version 4.0 EEP4
        *** KNOWN LIMITATIONS ***
                - Design-time support is not ready.  The EEP handles expert systems
                  that only use the MAIN defmodule.  The EEP does not correctly
                  stream in/out other defmodules
        - Demo applications have not been updated yet
                - Help files need to be updated MORE
        - Updated Help Files
        - Added TModulesDialog component
        - Added ModuleEditorForm VCL form for editing modules
        - Added TInferenceEngine.PrettyPrint( Construct: TObject ) method
        - Added TInferenceEngine.RenameDefinedType method
        - Added TInferenceEngine.RenameModule method
        - Renamed TInferenceEngine.ChangeFactTemplateName to RenameFactTemplate
        - Changed behavior of TIEDefinedTypes.Replace to allow replacing a
          deftype with another deftype from a different module
        - Changed behavior of TFactTemplates.Replace to allow replacing a
          template with another template from a different module
        - Changed TInferenceEngine.ReplaceTemplate method to update
          InitialFactPattern or NullFact if the template being replaced is
          of that type
        - Added TInferenceEngine.LoadModules and SaveModules methods
        - Changed TModules.Assign method to set Module Name before adding
          to TInferenceEngine (fixes bug where tabs could be created for
          EMPTY string Module Names)
        - Added PrettyPrint( IFactTemplate ) method to IReasoner interface
        - Added PrettyPrint( IModule ) method to IReasoner interface
        - Added RenameDefinedType method to IReasoner interface
        - Added RenameFactTemplate method to IReasoner interface
        - Added RenameModule method to IReasoner interface
        - Added RenameRule method to IReasoner interface
        - Added overloaded AddImport( String ) to IModule interface
        - Added overloaded RemoveImport( String ) to IModule interface
        - Modified PrettyPrint(IModule) to not print out constructs if
          import/export is ?NONE (e.g., (import MAIN deftype ?NONE))
        - Added SDuplicateModuleNames resource string
        - Fixed bug in TIEDefinedType.SetName where invalid name characters
          were accepted in deftype name
        - Fixed bug where module would import constructs from a module
          that were not exported by the second module
        - Fixed bug where modules could have the same name
        - Changed behavior of TModule so that EVERY module has its own
          InitialFactPattern (necessary for some RETE constructs, e.g.,
          (not (Something)))
        - Added implementation of IModule.AddImport( String ) method
        - Added implementation of IModule.RemoveImport( String ) method
        - Updated AgendaComment to include defmodule information
        - Updated ShowFactsComment to include defmodule information
        - Updated ListDefTypesComment to include defmodule information
        - Updated ListFactSetsComment to include defmodule information
        - Updated ListTemplatesComment to include defmodule information
        - Fixed TReteNetwork.AddRule method to only add InitialFactPattern
          if it exists
        - Fixed TReteNetwork.ProcessFourthPass method to handle rules
          without ANY patterns (even Initial-Fact) (can happen with
          non-MAIN modules
        - Updated WatchComment to include focus keyword
        - Updated UnwatchComment to include focus keyword
        - Fixed bug in Console AddActivation event handler where current module's activations
          wouldn't show up in listbox
        - Fixed bug in Console RemoveActivation event handler where current module's activations
          wouldn't show up in listbox


-------------------------------------------------------------------
September 16, 2012     Version 4.0 EEP3
        *** KNOWN LIMITATIONS ***
                - Design-time support is not ready.  The EEP handles expert systems
                  that only use the MAIN defmodule.  The EEP does not correctly
                  stream in/out other defmodules
        - Demo applications have not been updated yet
                - Help files need to be updated
        - Added RAD Studio XE3 Support
        - Updated Vcl/FMX Dialogs (Facts, FactTemplates, Types, and Rules) to support modules
              - Added TabControl for defmodules
              - Refactored code to update display properly when module changes
              - Changed buttons from TSpeedButton to TButton because of streaming
                errors in XE3 for TSpeedButton (TabOrder) (FMX)
              - Updated FontFill/FontColor property change from XE2 to XE3 (FMX)
              - Removed ability to use Delete Key to delete an item from the
                DefTypes and Rules TTreeView (XE3+ deleted OnKeyDown event) (FMX)
        - Added AssignDefinedTypesToTreeView function (IEVclHelperFunctions.pas and FMX.RS.IEHelperFunctions.pas)
        - Fixed range check bug in TIETypeEditorFrame.eUnitsChange by
          changing f from float to double, trunc(MaxInt) was returning
          MinInt
        - Fixed bug in TIEClipsParser.ParseFactTemplateSlot method where
          units with spaces were not being handled properly
        - Added TFacts.AssignLocal to only assign "local" (owned by module)
          facts (leaving non-local facts untouched)
        - Added TFacts.SortById method
        - Added TInferenceEngine.GetFacts method to retrieve all facts in
          every module
        - Changed TInferenceEngine.RemoveDependencies() to check for any
          fact templates that are exported
        - Changed TInferenceEngine.RemoveTemplate(IFactTemplate) to
          remove current module as ImportModule
        - Fixed TInferenceEngine.Run(Integer) to avoid infinite loop when
          stepping through inference
        - Fixed TIEDefinedTypes.Remove to remove dependencies properly
        - Modified TInferenceEngine.GetExpertSystem to output focus stack
          and not assert facts that are shared twice
        - Fixed bug in TInferenceEngine.GetExpertSystem which reported
          incorrect number of constructs for each module
        - Added TModules.ToNamesString method
        - Added TInferenceEngine.OnChangeCurrentModule event, called when
          CurrentModule is set.  (Note that this event is NOT called when
          Module.FocusModule is called)
        - Added TInferenceEngine.OnAddModule event
        - Added TInferenceEngine.OnRemoveModule event
        - Added TInferenceEngine.OnClearModule event
        - Added TInferenceEngine.OnClearModules event
        - Added TInferenceEngine.DoChangeCurrentModule method
        - Changed TAnimationFunction (stop-trigger-animation) to require
          trigger expression
        - Changed behavior of TFactsDialog/TFMXFactsDialog to copy ENTIRE
          inference engine instead of just facts to ensure ALL domains
          facts get copied over
        - Added EnableModuleSwitch property for defined types, facts, fact
          sets, fact templates, and rules dialogs
        - Changed dialog behavior to copy all facts/templates/etc of all modules
        - Added EnableModuleSwitch property for defined types, facts, fact
          sets, fact templates, and rules dialogs
        - Added FCPopFocus constant (like FCTrue), used to pop focus from rule RHS
        - Added code in TRule.Fire method to allow using (return) command
          to immediately exit the rule and pop the focus
        - Modified TRetractFunction (retract) to raise exception if fact-id
          is not found
        - Added ability for TReturnFunction (return) to immediately exit
          a rule and pop focus.  (return) must be on RHS of rule and have
          no parameters
        - Added CarriageReturn constant redefinition (XE2 has it wrong for FMX)
        - Added TInferenceEngineConstruct type
        - Added SInvalidModuleDependency resource string
        - Added SImportedDefTypeExists resource string
        - Added SImportedTemplateExists resource string
        - Added SUnableFindFact resource string
        - Added IModule.AssignModuleParameters method to Assign the
          module's name, comment, and import/export structures ONLY (no inference structures)
        - Changed IModule interface to descend from cloneable
        - Changed IModuleExport interface to descend from cloneable
        - Added IModule.AssignModuleParameters method to Assign the
          module's name, comment, and import/export structures ONLY (no inference structures)
        - Added IModuleImport.Release method
        - Added IModuleSharedConstruct.IndexOfImportModule method
        - Added IReasoner.GetCurrentModule method
        - Added implementation of ICloneable to TModule class
        - Added implementation of ICloneable to TModuleImportExport class
        - Added TModule.AssignModuleParameters method to Assign the
          module's name, comment, and import/export structures ONLY (no inference structures)
        - Added TModuleImport.Release method
        - Added TModuleSharedConstruct.IndexOfImportModule method
        - Changed TIEDefinedType to set the Module property when Reasoner
          property is set


-------------------------------------------------------------------
July 29, 2012     Version 4.0 EEP2
        *** KNOWN LIMITATIONS ***
                - Design-time support is not ready.  The EEP does not correctly
                  stream in/out defmodules
                - Dialogs do not work properly.  Do not use TRulesDialog, etc as the assignment
                  (when you hit OK) will not work properly.
                - DefinedTypes support with defmodules does not work.
        - Demo applications have not been updated yet.
        - Added defmodule support
              - Added IModule (defmodule) interface to define a defmodule
              - Added IModuleExport interface to define the structures a module exports
              - Added IModuleImport interface to define the structures a module imports
              - Added Module property (and getters/setters) to IFactTemplate and
                IIEDefinedType
              - Added IEModule unit that defines
                   - TModuleImportExport implements IModuleExport and IModuleImport
                     to track the structures a module either imports or exports
                   - TModule implements a defmodule (IModule)
                   - TModuleConstruct implements IModuleSharedConstruct interface,
                     a construct (fact template, defined type) that is sharable
                     between modules
              - Added defmodules (TInferenceEngine.Modules) to inference engine
              - Created TModules class (InferenceEngine.pas)
              - Modified TInferenceEngine.GetExpertSystem to output all modules
              - Modified TFactTemplates.PutValue to add the TFactTemplates.Module
                as an import module for the fact template
              - Modified TIEDefinedTypes.PutValue to add the TIEDefinedTypes.Module
                as an import module for the defined type
              - Added TInferenceEngine.AddModule method to add a module to the
                inference engine (and prepare it)
              - Added TInferenceEngine.RemoveModule method to remove a module from the
                inference engine (and release its resources)
              - Added TInferenceEngine.ParseFullName method to parse defmodule::Name strings
              - Added TInferenceEngine.Clear(IModule) method to clear the module
              - Added TInferenceEngine.ClearFacts(IModule) method to clear the facts from the module
              - Added TInferenceEngine.Reset(IModule) method to reset the module
              - Moved TInferenceEngine.CreateIEObject from protected to public
              - Moved TInferenceEngine module constructs (agenda, facts, rete, etc)
                from private to protected
              - Modified TInferenceEngine.CreateIEObject to create modules
              - Added otModules and otFactsPending to TIEObjectType (InferenceEngine.pas)
              - Added TIEParser.ParseFullName method
              - Added TIEParser.ParseModule method
              - Added TIEParser.PrettyPrint( IModule ) method
              - Added TIEClipsParser.ParseFullName method
              - Added TIEClipsParser.ParseModule method
              - Added TIEClipsParser.PrettyPrint( IModule ) method
              - Added PrettyPrint( IModule ) to unit
              - Modified PrettyPrint(IFactTemplate) to print module in name
              - Modified PrettyPrint(TFactSet) to print module in name
              - Modified PrettyPrint(TRule) to print module in name
              - Modified PrettyPrint(IIEDefinedType) to print module in name
              - Updated TIEClipsStream and TIEClipsParser to find module name and
                separator in parsing rules (ParseRule), fact templates (ParseFactTemplate),
                defined types (ParseDefinedType), and fact sets (ParseFactSet)
              - Added TRule.Module property to specify the module that owns
                the rule
              - Changed ancestor of TFactTemplate from TPersistent to TModuleConstruct
              - Modified TFactTemplate.Create methods to set the Module property
                to the TInferenceEngine.CurrentModule property
              - Removed redundant implementations of ICloneable and IInterface
                methods from TFactTemplate
              - Changed ancestor of TIEDefinedType from TPersistent to TModuleConstruct
              - Removed redundant implementations of ICloneable and IInterface
                methods from TIEDefinedType
              - Added TReteNetwork.Module property (set in constructor)
              - Modified TReteNetwork.Create constructor to require Module be
                passed in
              - Added cwFocus to TConstructWatch (IEConsts.pas)
              - Added IEAllWatches Constant (IEConsts.pas)
        - Added FMX Animation functions to FMX.RS.IEFMXPackage
              - Added TAnimationFunction (adds start-animation, stop-animation,
                pause-animation, resume-animation,
                start-trigger-animation, stop-trigger-animation, and
                start-trigger-animation-wait)
              - Added TGetAlphaColorFunction (adds get-color and
                get-color-name functions)
              - Added TPropertyAnimationFunction (adds animate-float, animate-float-delay,
                animate-float-wait, animate-color, animate-color-delay,
                animate-color-wait and stop-property-animation)
              - Added TGetColorFunction (adds get-color and get-color-name functions) to IEVclPackage
              - Fixed minimum number of arguments for message-dlg function
        - Added/Modified IECS functions
              - Added cwFocus to TWatchFunction and TUnwatchFunction
              - Added TCurrentModuleFunction (adds get-current-module and
                set-current-module commands)
              - Added TFocusModuleFunction (adds focus, clear-focus-stack,
                get-focus, get-focus-stack, and pop-focus commands)
              - Added defmodule support to TPrettyPrintFunction
              - Added TListFocusStackFunction (list-focus-stack)
              - Added support for specifying module name in TShowFactsFunction ([*|ModuleName])
              - Added support for specifying module name in TAgendaFunction ([*|ModuleName])
              - Added support for specifying module name in TListRulesFunction ([*|ModuleName])
              - Added support for specifying module name in TListTemplatesFunction ([*|ModuleName])
              - Added support for specifying module name in TListDefTypesFunction ([*|ModuleName])
              - Added support for specifying module name in TListFactSetsFunction ([*|ModuleName])
              - Added support for specifying module name in TPrettyPrintFunction (MODULE::NAME)
              - Added support for specifying module name in TUnDefTemplateFunction (MODULE::NAME)
              - Added support for specifying module name in TUnDefRuleFunction (MODULE::NAME)
              - Added support for specifying module name in TUnDefTypeFunction (MODULE::NAME)
              - Added support for specifying module name in TUnDefFactsFunction (MODULE::NAME)
        - Added IECSVersion Constant (IEConsts.pas)


-------------------------------------------------------------------
June 03, 2012     Version 4.0 EEP1
    - Added support for FireMonkey
        - Created FMX versions of IE Dialogs
              - Created FMX.RS.IEDialogs.pas unit
              - Created FMX.RS.ConsoleEditorForm.pas form/unit
              - Created FMX.RS.RuleEditorForm.pas form/unit
              - Created FMX.RS.FactEditorForm.pas form/unit
              - Created FMX.RS.FactTemplateEditorForm.pas form/unit
              - Created FMX.RS.FunctionsEditorForm.pas form/unit
              - Created FMX.RS.TypeEditorForm.pas form/unit
              - Created FMX.RS.TypeEditorFrame.pas form/unit
              - Created FMX.RS.ValueEditorForm.pas form/unit
              - Created IECustomDialog.pas unit
              - Added TIEVclCommonDialog class
              - Added TIEFMXCommonDialog class
    - Created IEVclPackage.pas and FMX.RS.IEFMXPackage.pas for Vcl and FMX 
          specific versions respectively of IECS user functions
              - Moved CreateComponent function from ObjectPackage to IEVclPackage
              - Created CreateComponent function in FMX.RS.IEFMXPackage
              - Moved InputBox function from MiscPackage to IEVclPackage
              - Created InputBox function in FMX.RS.IEFMXPackage
              - Moved InputQuery function from MiscPackage to IEVclPackage
              - Created InputQuery function in FMX.RS.IEFMXPackage
              - Moved MessageDlg function from MiscPackage to IEVclPackage
              - Created MessageDlg function in FMX.RS.IEFMXPackage
              - Moved ShowMessage function from MiscPackage to IEVclPackage
              - Created ShowMessage function in FMX.RS.IEFMXPackage
        - Created IEVclHelperFunctions.pas and FMX.RS.IEHelperFunctions.pas for Vcl and FMX 
          specific versions respectively of IECS helper functions 
              - Added AssignDefinedTypeToTreeView function
              - Added AssignDefinedTypeToTreeNode function
              - Added AssignFactTemplateToTreeView function
              - Added AssignFactTemplateToTreeNode function
              - Added AssignFactSlotToTreeNode function
              - Added AssignRuleToTreeView function
              - Added AssignRuleToTreeNode function
        - Added TGlobalVariablesProperty editor for TInferenceEngine.GlobalVariables property 
          design-time editing
        - Created FMX.RS.InferenceEngineReg.pas unit
    - Removed Vcl dependencies from units
              - Removed support for assigning TIEDefinedType to TTreeNodes (use IEVclHelperFunctions)
              - Removed support for assigning TFactTemplates to TTreeNodes (use IEVclHelperFunctions)
              - Removed support for assigning TRules to TTreeNodes (use IEVclHelperFunctions)
              - Removed FillNodeSlot, FillTreeView, and FillTreeViewNode methods
                from TFactTemplates for XE2 and beyond (use IEVclHelperFunctions)
              - Removed support for assigning TReteNetwork to TTreeNodes 
              - Moved CalculateHash function to HelperFunctions
              - Moved ContainsCharacters function to HelperFunctions
              - Moved FloatEquals function to HelperFunctions
              - Moved StringFilter function to HelperFunctions
              - Moved ReadPersistent function to HelperFunctions
              - Moved SetToString function to HelperFunctions
              - Moved StringToSet function to HelperFunctions
              - Moved SwapEvents function to HelperFunctions
              - Moved WritePersistent function to HelperFunctions
              - Moved SInvalidSetItem resource string to HelperFunctions
              - Changed TIEDefinedTypes.AssignTo method to assign text to ANY
                object which has a published Text property (instead of looking
                for TCustomEdit descendants, which is Vcl-specific)
        - Added Advanced Console (FMX) Demo project
        - Updated the Help file
    - Bug Fixes
              - Fixed bug in TInferenceEngine.StatRunTime property to correctly
                report number of seconds last run took
              - Fixed bug in TFactTemplates.FillNodeSlot method where slots
                with ExtendedTypeInfo did not get their TTreeNode.Data set to
                the TemplateName correctly
              - Changed TInferenceEngine.StatRunTime property to use the less precise Time,
                instead of MMSystem.TimeGetTime which was WinAPI specific
              - Changed tree node assignment and retrieval in FactTemplateEditorForm to use
                IEVclHelperFunctions.AssignFactTemplatesToTreeView function instead
                of TFactTemplates.AssignTo (required for XE2)
              - Changed FillTreeViewNode call in FactTemplateEditorForm.actNewExecute method to 
                AssignFactTemplateToTreeNode 
              - Changed FillNodeSlot call in FactTemplateEditorForm.AddTypeAndValue and 
                actNewSlotExecute methods to AssignFactSlotToTreeNode
              - Changed tree node assignment and retrieval in TypeEditorForm to use
                IEVclHelperFunctions.AssignDefinedTypeToTreeView function instead
                of TIEDefinedType.AssignTo (required for XE2)
              - Changed TemplateID from Integer to TRSNativeInt in ConsoleEditorForm
              - Updated FuzzySeries1 (TRSLineChart) property from Parent to
                Panel in TypeEditorFrame
              - Changed Fuzzy Draw Mode buttons to stay pressed in TypeEditorFrame
              - Disabled zooming in Fuzzy Chart in TypeEditorFrame
              - Fixed RuleEditorForm bug in adding and replacing rules where first pattern
                would not show up in rule tree
              - Fixed RuleEditorForm bug where wrong rule could be replaced if the selected
                tree node was wrong
              - Changed tree node assignment and retrieval in RuleEditorForm to use
                IEVclHelperFunctions.AssignFactTemplatesToTreeView function instead
                of TFactTemplates.AssignTo (required for XE2)
              - Changed tree node assignment and retrieval in RuleEditorForm to use
                IEVclHelperFunctions.AssignRulesToTreeView function instead
                of TRules.AssignTo (required for XE2)
              - Changed Caption type from TCaption to String for TIECustomDialog
              - Fixed bug in TUserPackage.RemoveReasoners where functions were
                not being removed correctly from Reasoners function lists
              - Fixed access violation bug in FunctionsEditorForm.SetItem where an item would try to be selected even
                when list is empty
              - Fixed bug where you cannot cancel dialog for ValueEditorFrom until syntax errors are fixed
              - Added Delete, Duplicate, and Clear popup menu items to ValueEditorForm
              - Fixed bug in TSetPropertyFunction.Call method to accept tkUString
              - Fixed TUserFunctionWizard for Delphi 2009+
              - Changed code to generate InitMetaData method instead of 
                AfterConstruction
              - Fixed SUnexpectedCharacters constant to have the correct arguments
              - Fixed bug in TRule.SetRuleName where wrong argument was being
                passed when SUnexpectedCharacters exception occured
              - Fixed bug in TFactSlot.SetName where wrong argument was being
                passed when SUnexpectedCharacters exception occured
              - Fixed bug in TFactTemplate.SetTemplateName where wrong argument was being
                passed when SUnexpectedCharacters exception occured


-------------------------------------------------------------------
December 11, 2011     Version 3.0
        - Added support for Rad Studio XE2, Win32 and Win64
        - Fixed Pointer to Integer Casts to use TRSNativeInt
        - Changed TIEValueRec.VInteger to be a TRSNativeInt instead of
          integer


-------------------------------------------------------------------
September 29, 2010     Version 2.9
        - Added support for Rad Studio XE
        - Includes updates to the RiverSoftAVG Charting Component Suite


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

Nov 8, 2009    Version 2.8.1.1
        - Fixed issue with Console editor (TInferenceEngine->Edit...) where
          it wouldn't work in Delphi 6 and 7 because of properties inserted
          by later versions of Delphi


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

Sept 7, 2009    Version 2.8.1
        - Added support for Delphi 2010
        - Changed help file(s) from WinHelp to HTML Help.  Note that there
          is a known issue with the display to Delphi links (available with
          WinHelp but not HTML Help)


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

Jan 31, 2009    Version 2.8
        - Added support for Delphi 2009 (Final)
        - Includes new RiverSoftAVG Charting Component Suite 2.0
        - Added TIFSValues.ToString method and TIFuzzySets.ToString methods,
          which just call their owners' ToString methods, to work around
          a D2009 "implements" problem


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

Dec 21, 2008    Version 2.8B1
    - Changed Install Directory to C:\Comps\RiverSoftAVG to reduce chances
      of too long path names (on new installs to a machine)
        - Added optional TEncoding parameter to TInferenceEngine Batch,
          StartCapture, LoadXXX/SaveXXX (Facts, Rules, etc),
          LoadFromXXX/SaveToXXX, and ParseXXX methods for D2009
        - Added optional Encoding parameter to TInferenceEngine.NewTokenizer
          method
        - Changed SaveToXXX methods to write TEncoding.Preamble
        - Added optional Encoding parameter to TIEClipsStream constructors
        - Changed AnsiUpper/LowerCase to use inline RSUpper/LowerCase which
          uses the correct call to avoid warnings in .NET, but still
          uses AnsiXXX for Win32
        - Added optional Encoding parameter to ISingletonsParser.ParseSingletons
          method
        - Modified TIEStreamToken.Value method to detect all question
          mark variable names as encoding errors
        - Added SEncodingProblem resource string
    - Fixed button images for FactEditorForm
    - Fixed button images for RuleEditorForm
        - Fixed Save As dialog for RuleEditorForm to state "Save Rules to File..."
        - Inference Engine Dialogs now inherit their parent form's Font by default
        - Added TIECommonDialog component, which adds Font and ParentFont
          properties
        - Changed TConsoleDialog to descend from TIECommonDialog
        - Changed TDefinedTypesDialog to descend from TIECommonDialog
        - Changed TRulesDialog to descend from TIECommonDialog
        - Changed TFactsDialog to descend from TIECommonDialog
        - Changed TFactTemplatesDialog to descend from TIECommonDialog
        - Changed TFactSetDialog to descend from TIECommonDialog
        - Changed TGlobalVariablesDialog to descend from TIECommonDialog
        - Changed TFunctionsDialog to descend from TIECommonDialog
        - Added Title Captions for all dialogs


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

Nov 23, 2008    Version 2.8B0
        - Added support for Delphi 2009
        - Changed set expressions in TIEClipsStream.FinishToken to
          use IsNumberChar and IsNumberSymbol from HelperFunctions.pas
        - Modified classes to avoid warnings about collisions with
          new methods added to TObject (D2009/.NET)
        - Changed AnsiChar back to Char, to align with D2009 fixes
          in TGTextStream,
        - Changed TIEClipsStream.SkipInLineSpaces to use
          new GetChar method to avoid any assumptions about 1-byte characters
        - Changed TFactsHashTable.ToString from property to method
        - Modified TRSRecordBuffer in IEDataSet.pas to match new Delphi 2009 TDataSet method
          signatures
        - Added TRSRecordBufferCast in IEDataSet.pas for internal use of methods to keep using PChar,
          even in Delphi 2009
        - Changed Writer.Write in UserFunctionWizard.StringToEditor to use PAnsiChar instead
          of PChar
        - Changed AnsiPos calls to Pos calls
        - Changed set expressions to use CharInSet
        - Changed Upper/LowerCase to AnsiUpper/LowerCase, because the Ansi version
          handles Unicode (go figure)
        - Modified code to use new common library IsUpper, IsLower, etc functions


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

Feb 09, 2008    Version 2.7.1
        - Recompiled to be compatible with RiverSoftAVG Common Classes
          Library 3.6.2


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

Nov 03, 2007    Version 2.7
    - Includes the new Fuzzy Logic Component Library v2.7


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

Oct 06, 2007    Version 2.6.1
    - Added RAD Studio 2007 .NET Support
    - Added RAD Studio 2007 support to installer
        - Fixed bug in TFactTemplate constructors where, if the new fact
          template was created from another fact template, the new fact
          template would inherit the old fact template's hash code
          (caused backward chaining and other more obscure inferencing
          errors) (Thanks P.T.)
        - Fixed bug in TInferenceEngine.AddActivation method where
          an activation watch would not print out the activation that
          had been activated
        - Fixed bug in FactTemplateEditorForm where the actNewSlot Execute method to select the new slot (was
          causing an access violation if the user edited it immediately)
        - Fixed visual error in FactTemplateEditorForm where the where slot types were not visible properly
          (check list box was cut off)
        - Fixed access violations (TIEDataSet) after calling GetNullFlags in GetFieldData
          method by including null flags in size of record in
          InternalInitFieldDefs method (Thanks P.T.)
        - Fixed TInterpretedFunction.Call method to resolve the result
          BEFORE freeing the local context, which avoids an access violation
          on (return) functions (Thanks D.T.)
    - Added Expert System Explorer Demo, which displays rete network for
      visualizing the structure of your expert system


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

Jun 23, 2007    Version 2.6
    - Added Delphi 2007 support to installer
        - Fixed resizing columns when TValueEditDlg form is resized
        - Fixed TValueEditDlg to parse variables when user clicks OK as well
          as when another cell gets selected
        - Fixed TValueEditDlg so that the global variables are validated
          BEFORE the form exits
        - Added support for the for-in language construct in TValueHashTable
        - Added support for the for-in language construct in TValueVector
    - Removed Published keyword from various non-TPersistent classes to get rid of D2007 warnings
        - Added support for the for-in language construct in TIEDefinedTypes
        - Added support for the for-in language construct in TFacts
        - Added support for the for-in language construct in TFactTemplates
        - Added support for the for-in language construct in TIOStreams
        - Added support for the for-in language construct in TFactSets
        - Added support for the for-in language construct in TRules
        - Added support for the for-in language construct in TUserFunctions
        - Added support for the for-in language construct in TFactTemplate (FactSlots)
        - Added support for the for-in language construct in TRulePatternList
        - Added support for the for-in language construct in TRuleActionList
        - Added support for the for-in language construct in TFactTemplate (FactSlots)
        - Added support for the for-in language construct in TFactSet (Facts)
        - Added support for the for-in language construct in TBaseReasonerList
        - Added support for the for-in language construct in TUserFunctionList
        - Added support for the for-in language construct in TDataSetList
        - Added support for the for-in language construct in TDBIEDataConnections
        - Improved installer


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

Aug 25, 2006    Version 2.5.1 RELEASE
        - Fixed TFuzzySet.IsUndecidable method to return correct answer
        - Added GetStatValues and GetAvgValue to TFuzzySetValues class
        - Added TFuzzySet.GetCompatibilityIndex method, which fixes
          CompatibilityIndex property 


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

Feb 8, 2006    Version 2.5 RELEASE
    - Official Release


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

Dec 22, 2005    Version 2.5b10
    - Rerelease for Delphi 2006 with new version of the RiverSoftAVG Common
      Classes Library that works around strange, unique, Delphi 2006 bug
      in streams (which affected parsing operations in the IECS) Thanks PG
    - Includes new RiverSoftAVG Charting Component Suite with new
      Graph Chart


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

Dec 11, 2005    Version 2.5b9
    - Official release for Delphi 2006


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

November 22, 2005    Version 2.5 Beta 8
        - Added Library Suffix of D90 (Delphi 2005) or D100 (Delphi 2006) for .NET
          to package names
        - Fixed bugs for expert system wizard (.NET)
        - Fixed casting error in IEExpertSystemWizardForm (.NET) for tags
          (happened on construction of form)
        - Fixed null string error in IEExpertSystemWizardForm (.NET)
    - Added Paint Demo for .NET
    Known Issues/Bugs
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors. 


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

November 8, 2005    Version 2.5 Beta 7
    - Optimized IEValue for .NET (gives an almost 10% speed increase)
    - Installers have had a massive overhaul
        - Compiled files are now installed to <INSTALLDIR>\Bin\W32\Dxx or
          <INSTALLDIR>\Bin\NET\Dxx and path is updated
          WARNING: BE SURE TO UNINSTALL PREVIOUS FILES WHICH MAY BE IN
          $(DELPHI)\Projects\Bpl DIRECTORY
        - Attempts to detect if evaluation or full versions are being
          installed and warns about incompatibilities
        - Smarter updates of registry
        - Added missing registry updates (Package Search Path, Namespace Search Path, etc)
    - Fixed Missing Component Icons (.NET)
    Known Issues/Bugs
        - Need to update Help files to reflect any changes
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors. 


-------------------------------------------------------------------
 
October 18, 2005    Version 2.5 Beta 6
        - Updated Dcl and IEWizards packages to NOT include library version,
      should make updating versions within Delphi easier in the future

****      You MUST uninstall old versions before installing new IECS        ****

        - Fixed IE User Function Wizard to output the corrected code
        - Fixed the XXXType property to properly change the comment
          and arguments when the first item in the enumeration was
          selected.  For example, the TFuzzyAssertFunction.FuzzyAssertFunctionType
          would not set comment and arguments property for the fafAssert
          enumerated value in the construction of the object.


-------------------------------------------------------------------
 
October 5, 2005    Version 2.5 Beta 5
    - Fixed some installer issues with missing files
    Known Issues/Bugs
        - Need to update Help files to reflect any changes
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors.


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

September 26, 2005    Version 2.5 Beta 4
    - Vastly reduced number of hints and warnings for .NET
        - Changed Win32 VCL package numbers to 2.5
        - Updated properties and accessor methods for interfaces and their
          implementing objects to add underscore for .NET
        - Moved interface methods for classes (such as TIEUserFunction)
          from protected to public visibility (which they already were, but this
          makes it explicit)
    - Updated help files (unfinished)
    Known Issues/Bugs
        - Need to update Help files to reflect any changes
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors.


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

August 29, 2005    Version 2.5 Beta 3
        - Uses new RiverSoftAVG Charts beta 2
    - Updated help files (unfinished)
    Known Issues/Bugs
        - Need to update Help files to reflect any changes
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors.
                - TRSChartPanel component still has some visual errors with the axes
                - TRSChartPanel component does not support all gradient directions
                  it indicates it should


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

July 31, 2005    Version 2.5 Beta 2
        - Attempted Optimization of IEClipsParser.pas PrettyPrint functions for .NET 
      (However, in our test cases, the StringBuilder functions ran 20% slower).
    - Fixed all peverify errors to make .NET version 100% managed code
        - Changed TFuzzyAssertFunction, TRWFuzzyCorrelationFunction, and
      TRWFuzzyInferenceFunction Call methods to use, for exceptions,
      FuzzyCorrelationSuffixNameList and FuzzyInferenceSuffixNameList
      constants instead of trying to build complete set on the fly
      (which was difficult in .NET)
        - Added FuzzyCorrelationNameList and FuzzyCorrelationSuffixNameList
          constants to FuzzyConsts.pas
        - Added FuzzyInferenceNameList and FuzzyInferenceSuffixNameList
          constants to FuzzyConsts.pas
    - Fixed install script to properly copy RiverSoftAVG.VCL.Controls.dll
      to the bin/NET directory
    Known Issues/Bugs
                - Code is not optimized at this point.  For .NET, this is especially
                  noticeable because the IECS builds strings the inefficient
                  way, e.g., without using StringBuilder class
        - Need to update Help files to reflect any changes
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors.
                - TRSChartPanel component still has some visual errors with the axes
                - TRSChartPanel component does not support all gradient directions
                  it indicates it should


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

June 27 2005    Version 2.5 Beta 1
        - Fixed index caching bugs with hash table, would cause access violations
          in certain situations
        - Fixed bug in TypeEditorFrame.pas where access violation (or Object
          reference not set) would occur when switching between 2 fuzzy types

    Known Issues/Bugs
                - Code is not optimized at this point.  For .NET, this is especially
                  noticeable because the IECS builds strings the inefficient
                  way, e.g., without using StringBuilder class
                - Installer needs to be improved for Delphi.NET
        - Need to update Help files to reflect any changes
                - FuzzyLogicPackage includes some unsafe code which needs to be fixed to
                  make the IECS 100% safe, managed code
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors.
                - TRSChartPanel component still has some visual errors with the axes
                - TRSChartPanel component does not support all gradient directions
                  it indicates it should


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

June 2005    Version 2.5 Beta 0
        MAJOR CHANGES
        -------------
        - Added Vcl.NET support.  Win32 and .NET versions are identical except
          that .NET does not have DB support, the User Function Wizard, and
          some minor miscellaneous functions
        - Replaced TeeChart with RiverSoftAVG Charting Components
        - Created RiverSoftAVG Charting Components, free for non-commercial use
          *with* source code, for VCL.NET and Win32.  Charting components
          include line chart, area chart, arrow chart, bar chart, pie chart,
          point chart, and shape chart
                - For Win32 and .NET
                - Free with source.  Royalty free for use in your non-commercial
                  applications (Commercial use license is included free with all
                  IECS v2.5 users ($100 value))
                - Design-time definition of chart values
                - Less confusing and error prone
                - Point Chart can display images in the point
                - Shape Chart can display multiple shapes, with images
        - Created the following assemblies/packages for .NET
                  RiverSoftAVG.Common                  Common Classes
                  RiverSoftAVG.VCL.Controls            VCL Classes Library (Extends VCL and Fixes errors)
                  RiverSoftAVG.Charts                  Charting Components
                  RiverSoftAVG.Charts.Design           Charting Components (Design-Time)
                  RiverSoftAVG.AI.Flocking             Flocking Component Library (not included with IECS)
                  RiverSoftAVG.AI.FuzzyLogic           Fuzzy Logic Component Libary
                  RiverSoftAVG.AI.FuzzyLogic.Design    Fuzzy Logic Component Libary (Design-Time)
                  RiverSoftAVG.AI.Genetic              Genetic Algorithms Component Library (not included with IECS)
                  RiverSoftAVG.AI.Inference            Inference Engine Component Suite
                  RiverSoftAVG.AI.Inference.Design     IECS (Design-Time)
                  RiverSoftAVG.AI.Inference.Editors    IECS Editors
                  RiverSoftAVG.AI.Inference.Editors    IECS Wizards
                  RiverSoftAVG.AI.Path                 Path Planning Component Library (not included with IECS)

        DETAILS
        -------
        - Created RSConstants.pas file, which includes basic types and constants.
          Some of these constants and types were moved from IEConsts.pas and
          FuzzyConsts.pas
          Among the most important new types:
                - TRSPointerType, which equals Pointer in Win32 and TObject in .NET
                - TRSStringPointerType, which equals PChar in Win32 and String in .NET
        - Modified most files to:
                - Include RSDefines.inc
                - Include RSConstants.pas
                - Changed all methods and properties that use IUnknown interface to use
                  IInterface interface.  Added IInterface interface for Delphi 5 support
                - Changed all QueryInterface calls to use Supports functions.
                - Removed reference counting code for .NET (not needed)
                - Changed ToString properties to AsString and GetToString methods to
                  ToString to sync better with .NET (in which all objects have ToString
                  method)
                - Changed Tag properties to be of TRSTag type (Win32=Integer;.NET=Variant)
                - Introduced TxxxPersistent class to get around a delphi
                  compiler bug with class helpers (QC report #11019)
                - Added inherited Creates calls to constructors for
                  compatibility with .NET
                - Deleted AfterConstruction and BeforeDestruction methods (for .NET)
                - Extracted icons from DCR files to create assembly bitmap files
                  for design-time icons in .NET
                - Conditional compiled IUnknown methods (_addref, _release...)
                  because they are not needed with .NET
        RiverSoftAVG Common Classes Library (GCollections package in Delphi 5, 6, and 7;
                               RSCommon package in Delphi 2005 (Win32) and
                               RiverSoftAVG.Common assembly in VCL.NET)
                - Created TRSEncodedBits class (in RSEncodedBits.pas), a TBits descendant
                  with methods to encode/decode simple types into the TBits
                - Modified InterfaceCollections.pas
                        - Modified TGInterfaceList to descend from TPersistent
                        - Modified descendants of TGInterfaceList to correctly override
                          methods
                        - Modified list classes to use a dynamic arrays instead of a
                          pointer to such an array (as used for Win32).  The pointer
                          implementation was left for Win32 since it is faster than the
                          dynamic array implementation
                        - Changed DEMO out of memory errors to use standard Exception,
                          instead of EOutOfMemory exception, which (contrary to help file)
                          seems to have disappeared from the SysUtils unit
                - Modified HelperFunctions.pas
                        - Added WriteStringToStream function
                        - Added SameValue and Supports functions for Delphi 5
                        - Added CreateObjectClass and ClonePersistentClass methods
                - Modified GStreams.pas
                        - Added Close method to TGBufferStream (useful for .NET)
                        - TGSpecialFiler is not available for .NET (because can't crack
                          protected methods of TReader/TWriter)
                - Modified GRegularExpression.pas
                        - Modified String references to AnsiString references (for .NET
                          compatibility).  The Regular Expression object must use
                          AnsiString (one byte characters) because it uses set operations
                          which do not work with wide chars.
                - Modified GParser.pas
                         - Changed StrScan calls to Pos, even though StrScan is faster it is not
                         .NET compatible
                - Modified GLists.pas
                         - Added TQOrderedList class, which is base class for the TQxxx
                           stacks and queues, and TQOrderedListClass type.  These classes
                           are useful because they have a virtual constructor, unlike
                           Borland's classes
                - Modified GHashtable.pas
                         - Modified TGCustomHashTable to use a dynamic array of hash
                           table entries (THashtableEntries) instead of a pointer to
                           such an array (as used for Win32).  The pointer implementation
                           was left for Win32 since it is faster than the dynamic array
                           implementation
                - Modified GGraph.pas
                         - Changed TGCustomGraph.AddNode method visibility from protected
                           to public (.NET does not like changing visiblity with methods)
                - Modified DataStructures.pas
                         - Added TFloatHeapElement, TFloatHeap, and TFloatPriorityQueue classes
                         - Changed TPriorityList.OrderedListClass to use GLists.TQOrderedList
                           instead of Borland's classes because we can't get to the items of the
                           list quickly
                - Modified Structures.pas
                         - Added overloaded AddObject method to TGStringList
                - Added RSGraphics.pas, moved from internal development package to common
                  classes library.  Modified RSGraphics.pas as well:
                         - Added RSCenterPoint functions
                         - Added DrawPieSlice procedure
                         - Added DrawArrow procedure and TArrowOption types
                         - Changed Gradient functions to accept an open array of TColor,
                           instead of TColors
                         - Moved TObjectSize from Game.pas to RSGraphics.pas
                         - Created hierarchy of TRSCustomRect, TRSObjectRect, and TObjectSize
                         - Added TRSRect, TRSPoint and functions to manipulate them
                         - Added overloaded DrawShape procedures and TRSShapeStyle type
                         - Fixed LineGradient to handle "reversed" TRects (left > Right, etc)
                         - Fixed RotateFont to change font name if font is not a true type
                           (and wouldn't thus rotate)
                         - Added GetRotatedTextExtent function (Delphi's Canvas.TextExtent
                           does not work for rotated fonts)
        RiverSoftAVG Fuzzy Logic Component Library
                - Modified IFuzzyLogic.pas
                        - Added LOTS of methods to TIFuzzySet because .NET does not support
                          "implements" keyword
                        - Added LOTS of methods to TIFuzzyVariable because .NET does not support
                          "implements" keyword
                        - Changed hash table pointer references to use TRSPointerType
                        - Had to resurface TFuzzyStreamTokenList methods because of
                          Delphi.NET compiler bug (QC report #)
                - Modified FuzzyLogic.pas
                      - Changed VerifyAll protected method to use TFuzzyStreamTokenTypes
                        instead of TIntegerSet (needed for .NET) and changed all calls
                        to VerifyAll
                      - Changed overloaded constructors to NOT call other constructor
                        (not supported well in Delphi.NET)
                      - Moved EFzyException to FuzzyConsts
                - Modified FuzzyConsts.pas
                           - Moved some constants to RSConstants.pas
                           - Moved EFzyException to FuzzyConsts and inherit from ERSException
        RiverSoftAVG Inference Engine Component Suite
                - Modified BusinessPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified IEClipsParser.pas
                      - Changed Char types to AnsiChar
                - Modified IEConsts.pas
                      - Added SNotDOTNETFunction resource string
                      - Moved some constants to RSConstants.pas
                      - Changed EIEException to inherit from ERSException
                - Modified FuzzyLogicPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified IEFacts.pas
                      - Moved TIEPattern.SetOwner method visibility from protected to
                        public (for .NET)
                      - Moved TFactSet.SetEngineNoParse method visibility from protected to
                        public (for .NET)
                      - Fixed declaration of Notify for .NET
                      - Added TFactValues.FindEntry protected method to get around
                        .NET assembly restrictions
                - Modified IEHelperFunctions.pas
                      - Changed StrScan calls to Pos, even though StrScan is faster it is not
                        .NET compatible
                      - ReadPersistent function does not work in .NET
                      - Changed SetToString to call GetSetNames in .NET
                      - Changed CalculateHashCode to use String.GetHashCode in .NET
                - Modified IEInterfaces.pas
                      - Changed ToString property for all interfaces to AsString
                        and GetToString method to ToString method (for .NET)
                - Modified IEPackages.pas
                      - Added TIEUserFunction InitMetaData method for initializing the
                        function name, comment, and argumentstring (replaces what
                        the AfterConstruction method was used for in descendant classes,
                        makes .NET port easier)
                - Modified IEParser.pas
                      - Moved TIEParser.OnXXX events from protected to public (for .NET)
                - Modified IEPropertyEditors.pas
                - Added TIEClassProperty class, a TClassProperty editor that provides
                          safer access to the class.
                        - Modified the class property editor classes (TDefinedTypesProperty,
                          TFactsProperty, etc) to descend from TIEClassProperty editor class
                - Modified IERule.pas
                      - Moved TRule.AddBinding method visibility from protected to
                        public (for .NET)
                      - Moved TRule.Change method visibility from protected to
                        public (for .NET)
                      - Fixed declaration of Notify for .NET
                - Modified IEValue.pas
                      - Removed TIEValue.Create(Pointer) constructor and changed
                        TIEValue.Create(TObject; Boolean) constructor to not use default
                        parameters.  The Delphi.NET compiler gets confused with TObject
                        and the constructors with interfaces
                      - Added TIEValueType (.NET=Variant, Win32=TIEValueRec) and
                        TRSPointerType (.NET=TObject, Win32=Pointer) to make
                        writing .NET and Win32 compliant code easier
                      - TIEValue cannot Assign AsOwningObject that is a TPersistent
                        in .NET because .NET won't create objects without a virtual
                        constructor
                - Modified IEWizPropertyEditors.pas
                - Modified TSlotItemProperty and TStructureItemProperty for .NET
                - Modified InferenceEngine.pas
                      - Moved TInferenceEngine.ChangeFactTemplateName method from
                        protected visibility to public (needed for .NET)
                      - Moved TInferenceEngine.RuleChange method from
                        protected visibility to public (needed for .NET)
                      - Moved TInferenceEngine.NewTokenizer method from
                        protected visibility to public (needed for .NET)
                      - Moved TInferenceEngine.RetractFact method from
                        protected visibility to public (needed for .NET)
                      - Moved TInferenceEngine.AddActivation method from
                        protected visibility to public (needed for .NET)
                      - Moved TInferenceEngine.RemoveActivation method from
                        protected visibility to public (needed for .NET)
                      - Moved TInferenceEngine.RuleFired method from
                        protected visibility to public (needed for .NET)
                      - Changed TCustomTreeView calls to TTreeView for .NET
                - Modified MathPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified MiscPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified ObjectPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                      - Modified TGet/SetPropertyFunction classes to not use PropInfo
                        so that there are no .NET changes
                      - Modified TGetPropertiesFunction for .NET
                - Modified PredicatePackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified ReteNetwork.pas
                      - Moved Activations Standdown call from TPatternMatchTerminalNode
                        BeforeDestruction method (doesn't exist in .NET) to Destroy method
                - Modified RuleEditorForm.pas
                      - Added conditional compilation for TreeView.OnCompare event
                        (which changed in .NET)
                - Modified StandardPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified StringPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified TrigonometryPackage.pas
                      - Changed AfterConstruction methods to InitMetaData method
                - Modified TypeEditorFrame.pas
                      - Replaced TeeChart with RSCharts
                - Modified TypeEditorForm.pas
                      - Added conditional compilation for TreeView.OnCompare event
                        (which changed in .NET)

    Known Issues/Bugs
                - Code is not optimized at this point.  For .NET, this is especially
                  noticeable because the IECS builds strings the inefficient
                  way, e.g., without using StringBuilder class
                - Installer needs to be improved for Delphi.NET
        - Need to update Help files to reflect any changes
                - FuzzyLogicPackage includes some unsafe code which needs to be fixed to
                  make the IECS 100% safe, managed code
                - Because the editors were not changed from .dfm to .nfm, when
                  you load these forms it always uses the Win32 versions of the
                  components.  If you only install the IECS.NET, you will get
                  "Component not found" errors.
                - TRSChartPanel component still has some visual errors with the axes
                - TRSChartPanel component does not support all gradient directions
                  it indicates it should



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

January 2005    Version 2.13
        - Modified to work with Delphi 5, 6, 7, and 2005 (Win32)
                - Added RSDefines.inc to simplify updates for new
                  versions of Delphi
                - Modified source files to use RSDefines.inc
    - Renamed GCollections package to RSCommon package for Delphi 2005 ONLY
        - Fixed EListError exceptions in dialogs because of Delphi bug 5936,
          first reported by Leonel Togniolli, "Changing Visibility of a TabSheet
          causes Error" by introducing TRSPageControl into EditBoxesDxx package
    - Includes update in Common library and Fuzzy Logic Library
      (see their respective history files for more information)
    - Started Modifying source files to work with .NET (Incomplete)


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

April 2004    Version 2.12
    - Fixed some range check errors in IEFacts, and IEValue.pas
    - Includes update in Common library and Fuzzy Logic Library
      (see their respective history files for more information)


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

March 2004    Version 2.11
    - Installation script is much smarter about managing the different Delphi versions
        - Updated Common Help File
        - Updated Fuzzy Logic Help File
        - Added 9 new deffunctions (implemented by TIsIEStructFunction and
          TListVariablesFunction in miscpackage.pas)
        - Added TIsIEStructFunction (implements is-binding, is-deffacts,
          is-deffunction, is-defglobal, is-defrule, is-deftemplate, and
          is-deftype)
        - Added TListVariablesFunction (implements list-bindings and
          list-defglobals)
        - Added ValueEditorForm for editing TValueHashTables, such as
          TInferenceEngine.GlobalVariables property
        - Added TGlobalVariablesDialog component
        - Added TGlobalVariablesDialog to AI palette
        - Reintroduced FuzzyOperatorMinThreshold into TIFuzzySet (caused
          access violation in inference engine when fuzzy logic was used)
        - Moved TFuzzySet.Defined property to published visibility
        - Set Defined to True if design time
        - Fixed TCustomFuzzyLogic.Strings property to properly update
          itself when the underlying fuzzy variables have changed
        - Added ToString and ValuesToString properties and GetToString and
          GetValuesToString methods to TFuzzySet
        - Added ToString property and GetToString method to TFuzzyVariable
        - Moved TFuzzySet.Defined property to published visibility
        - Set Defined to True if design time
        - Added UpdateStrings method to TCustomFuzzyLogic
        - Overrode UpdateStrings method in TFuzzyLogic
        - Fixed Parse method in TFuzzyLogic (actually the code for UpdateStrings)
        - Added Parse and ParseFuzzyLogic methods to TCustomFuzzyLogicParser
        - Fixed Parsing error for s and z functions in CalcFuzzyFunction
          method of TCustomFuzzyLogicParser
        - Added DefuzzifyValue property and CreateCrispValue to IFuzzySet interface
        - Added ParseFuzzyLogic protected methods
        - Fixed Bug in PrettyPrint of fuzzy variables
        - Renamed form for Advanced Console Example Form, was causing conflicts
          with the Console Dialog (in Delphi 5 at least)
        - Fixed HSM Demo to be Delphi 5 compatible


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

January 2004    Version 2.1B
        - Added str-format user function (StringPackage.TStrFormatFunction)
        - Created a helper function in IEHelperFunctions to format a string
          according to the CLIPS formatting rules, used by format and str-format
          functions (CLIPSFormat)
        - Modified TFormatFunction to use IEHelperFunctions.CLIPSFormat
          function
        - Modified FuzzyLogic library extensively (see Fuzzy Logic History.txt)
        - Added two more overloaded TInferenceEngine.EvalFuzzyExpression methods to satisfy
          the new methods in IFuzzyParser
        - Added EvalFuzzyExpression methods to IFuzzyParser
        - Changed TIEDefinedTypes.Put method to use Low/Medium/HighFuzzyTerms
          resource strings for adding FuzzyAutoTerms in InferenceEngine.pas
        - Added Edit Defined Types button and menu item to Advanced Console Demo
        - Added View Expert System Action and Menu Item to Advanced Console Demo
          and console editor
        - Added vaFileView to TValidAction, which controls View Expert System


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

May 2003    Version 2.02
        - Modified TUserFunctionWizard to use the OpenTools API instead of old
          Delphi 2/3 interfaces
        - Fixed bug in the open function for the append mode.  It was
      overwriting previous files instead of appending to the end 
      of them (Thanks E.P.)
        - Fixed bug in TUserFunctionWizard.Execute where if the form file
          was being displayed, the unit would be unchanged (Thanks Marc S.)


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

August 2002    Version 2.01
        - Added SFuzzyEmpty variable to FuzzyConsts.pas
        - Changed FuzzyFormatStr, LeftFuzzyParentheses, and
          RightFuzzyParentheses to variables to FuzzyConsts.pas
        - Moved SFuzzyEmpty constant from IEConsts to FuzzyConsts.pas
        - Fixed TIEDefinedType.CreateValidDefault method to create a
          valid empty fuzzy set, fixed bug in Wizard with the Hometown Advisor
          Expert System
        - Modified TIEClipsParser.ParseSlotTypes to use STypeXXXXKeyword
          variables
        - Added STypeXXXKeyword variables to IEConsts
        - Optimized TIEClipsStream
            - Uses a TStringStream instead of a String for the
              already parsed ToString (MUCH better for long streams, 15x Faster)
            - Sets TFactSet.Engine without reparsing already parsed facts in
              ParseExpression
        - Added TFactSet.SetEngineNoParse protected method which sets
          the Engine property without reparsing all the facts (useful
          when you know all facts have already been parsed with the
          new Engine value)
        - Fixed bug in TIEESDomain.Destroy method causing access violation
          because it freed the fact template items before rule items
        - Fixed bug in TInferenceEngine.Assign when copying an interpreted
          function which refers to a fact template (before the fact
          template is copied)
        - Added overloaded TUserFunctions.Assign method and
          TUserFunctions.AssignInterpretedFunctions
        - Modified Object & Interface method calls in many classes/units to pass
          *strings* by const, which avoids a hidden try-finally block to speed
          up execution
        - Modified TFactTemplate.GetSlotNames to return the slot names
          *sorted*
        - Fixed bug in TFact.GetHashCode which would return different
          hash codes for the same fact if the slot values came in a
          different order
        - Modified TIEValue to use a special record instead of a variant
          and pointer to store the values, reduces memory consumption and
          is faster
    - Modified units to make them compatible with Delphi 7
    - Fixed limitation in GHashTable.pas which wouldn't allow you to
      shrink the hash table if there were items in it
          

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

July 2002    Version 2 Final Release

        - Added Enabled Property to TReteNetwork.  If the TReteNetwork is
          disabled, inferencing is disabled.  However, for editor dialogs
          (rules and facts), disabling the TReteNetwork will speed up the
          loading significantly
        - Optimized TFactsDialog, TFactSetDialog, and TRulesDialog
          by turning off the Rete Network during loading
        - Fixed TInferenceEngine.ReplaceTemplate method which would NOT
          detect dependency on a fact template when the rule had an action
          that asserted a fact based on that fact template
        - Added TInferenceEngine.IsDependent methods
        - Fixed really stupid and annoying bug in TIFuzzyVariable.Destroy
          where I would refer to a field AFTER the Destroy call (sometimes
          causing an access violation)
        - Fixed TFactSlot.Assign method to correctly copy the type if
          the other fact slot is from another inference engine
        - Fixed bug in TIFuzzyVariable.Destroy method, now sets events
          and parser to nil
        - Fixed TFactSlot.Destroy to nil out SlotDefault
          (and its OnChange event)
        - Fixed TInferenceEngine.ReplaceDefinedType to also reparse
          slot default if type changes.  This was a problem when fuzzy
          types would change but the value was still based on old fuzzy type
        - Fixed TUnDefTemplateFunction and TUnDefRuleFunction in MiscPackage.pas
          to return FCFalse instead of raising an exception when the construct does
          not exist
        - Added TUnDefTypeFunction to MiscPackage.pas
        - Fixed Edit Fact Templates dialog in Rule Editor Form to update fact
          templates tree view after returning
        - Fixed TInferenceEngine.LoadFactTemplates method to only clear
          fact templates (and their associated facts and rules), instead
          of everything
        - Fixed TIEDefinedTypes class to set Reasoner property of
          IIEDefinedType to nil when type is being deleted or cleared
        - Changed the DB alias used for the demos from "Applicants" to "IECS"
        - Added Hometown Advisor Domain to Expert System Wizard
        - Fixed IEExpertSystemWizard.TIEESFactItem.Assign method to not add new
          slots when assign IFact values
        - Fixed TIEESFactTemplateItem.Assign method to update facts and
          rules after it has changed
        - Updated Demo to limit number of defined types, fact templates and rules to ~30
        - Fixed TFactSlot.IsValid to accept FCNil and FCNilList
        - Added IDBIEBookmark interface and TDBIEBookmark class
        - Added ReplaceFact method to TDBIEDataConnection
        - Added UpdateDependencies and UpdateDependentFact methods to TInferenceEngine
        - Moved BeginTemplateChange and EndTemplateChange methods from
          TDBIEDataConnections class to TDBIEDataConnection class
        - Fixed bugs with changing defined types not being reflected in
          the TDBIESlot class
        - Added GetUniqueName and IsUniqueName methods to TDBIEDataConnections
          class to ensure each data connection gets a unique fact template name
        - Added overloaded ParseValue methods to TInferenceEngine
        - Added overloaded ParseValue methods to TIEClipsParser
        - Changed TIEClipsParser.ParseFactTemplateSlot to use new ParseValue method
        - Added overloaded ParseValue methods to TIEParser
        - Added TDBIESlotDefinedTypeProperty editor, provides drop down list
          for TDBIESlot.SlotType property
        - Fixed TIEClipsParser.ParseFactTemplateSlot to correctly parse
          fuzzy default values which start with brackets ([)
        - Added SEmptyFuzzy constant
        - Fixed TInferenceEngine.EvalFuzzyExpression to detect '' or
          SEmptyFuzzy as an empty fuzzy set
        - Fixed PrettyPrint(IFuzzySet) to print out SEmptyFuzzy as blank string
        - Fixed behavior of TDBInferenceEngine.Reset method to reassert current
          record from DataSources
        - Fixed bug in TFuzzySet.Iterate, should return True if both are empty
        - Fixed bug in TIFuzzySet.Iterate, should return True if both are empty
        - Improved TDBInferenceEngine.Notification method to see if TField's
          DataSets are being destroyed to just nil the DataSources

          Known Issues: None

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

May 2002    Version 2 EEP - Update 05

        - Finished FuzzyLogic.hlp (over 450 KB of help)
        - Updated IE.hlp (Incomplete)
        - Updated Common.hlp (Incomplete)
        - Fixed TIEClipsParser.ParseFunCall to correctly parse nested
          funcalls OR singletons
        - Fixed TReteNetwork.Evaluate method to not resolve global variables
        - Added TDBDataSetPropertiesFunction and TDBNavigatorFunction, which
            add 18 more expert system functions:
                get-dataset-empty, get-dataset-read-only, get-dataset-active
                set-dataset-read-only, set-dataset-active, dataset-first
                dataset-prior, dataset-next, dataset-last
                dataset-insert, dataset-delete, dataset-edit
                dataset-post, dataset-cancel, dataset-refresh
                dataset-at-first, dataset-at-last, dataset-move-by
          Known Issues:
                - TDBInferenceEngine has bugs when using defined types

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

April 2002    Version 2 EEP - Update 04

        - Added SlotTypes, SlotType, and DefinedType properties to TDBIESlot
          to allow a database field to map to any type, including fuzzy
          (DBInferenceEngine.pas)
        - Added GetFieldSlotValue, GetFieldSlotTypes, SetFieldSlotValue methods
          to TDBIESlot (DBInferenceEngine.pas)
        - Fixed Issues with CreateFieldSlot, GetFieldSlotTypes for
          TDBInferenceEngine (DBInferenceEngine.pas)
        - Fixed TJoinNode.RunTestVaryRight method to reinitialize the
          Token.NegatedCount before exiting (caused pattern match errors
          in some special cases such as having a min and max rule together)
        - Added ToString method to TBindingInfo and TBinding
        - Optimized TIEValue.Equals method to check if parameter equals
          self (good optimization for checking against FCFalse and FCTrue
        - Modified TIEValue.GetAsInteger and TIEValue.GetAsNumeric methods
          to return the defuzzified value (or closest to it) if the type
          is fuzzy
        - Modified TIEValue.GetAsString to return the fuzzy expression
          if the type is fuzzy
        - Added IFuzzySet.Defuzzify method to FuzzyInterfaces.pas
        - Added TIFuzzySet.Defuzzify method to IFuzzyLogic.pas
        - Added Default keyword to TInferenceEngine.FuzzyXXXMethod properties so that
          the property doesn't get streamed unnecessarily
        - Published TInferenceEngine.GlobalVariables so that it may be
          streamed out
        - Modified the TInferenceEngine streaming mechanism to stream
          fact sets
        - Fixed IEClipsParser.PrettyPrint( Name, Value ) method to add the variable
          character ('?') if it is not present
        - Changed TPatternMatchNode.CallNode method to test slot values
          to see if they equal FCFalse instead of FCTrue.  This has the
          effect of making tests that return an index or FCFalse (such as
          member function) working as you would expect
        - Fixed TIEClipsStream.ReadString method to raise an exception if
          the string is not terminated
        - Updated IEEditors.hlp to match the updated editors
        - Fixed LineNumber reporting error.  The parser was stating the
          wrong line number when an exception occured
        - Created a TActivationAgenda and TIEAgenda class for tracking the rule
          activations in the TInferenceEngine.
        - Optimizations
         - Changed TGCustomGraph.RemovePredecessors to pass in ANode by const and
               to use TGGraphNode.RemovePredecessors method
             - Added TGGraphNode.RemovePredecessors method
             - Optimized TReteNetwork.TPatternMatchNode.Equals method
             - Changed TReteNetwork.TReteNode base class to TGLinkedGraphNode

          Known Issues:
                - TDBInferenceEngine has bugs when using defined types

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

March 2002    Version 2 EEP - Update 03

          - Created FuzzyLogic.hlp - INCOMPLETE
          - Updated IEEditors.hlp
        - Updated all modules with ObjExportAll using conditional compilation to
          avoid possible bug in Delphi 5.
          From Delphi Bug List:
               Compiler - Linker
               The compiler directive {$objexportall on} in a unit (e.g.
               suspectunit.pas) causes the DCC32 link stage to fail, producing
               only a .dcu, but no .exe output and no error messages
        - Fixed Bug in TypeEditorFrame.pas, TIETypeEditorFrame.Change method
          where it would execute even when the frame was being destroyed
          (causing access violations)
        - Added ability of Expert System Wizard to use the current expert system
          in the IDE (modified IEPropertyEditors.TInferenceEngineEditor component)
        - Fixed Expert System Wizard bug in Load Expert System button, it now
          properly shows the loaded expert system as a domain option
        - Modified the Expert System wizard to show the expert system loaded when
          you load an expert system from disk
        - Fixed bug in IEValue.pas TIEValue.Resolve for dtSingletons where the
          fuzzy name was inproperly set to the unresolved singletons
          string
        - Modified ReteNetwork.pas TJoinNode.DoRunTestsVaryLeft and
          DoRunTestsVaryRight methods to pass the minimum token strength onto
          new tokens, fixes activation strength bug for fuzzy rules
        - Fixed bug in TInterpretedFunction.Call method where multivariables
          were not getting properly bound
        - Fixed TInferenceEngine.Assign method, which was raising an
          exception because of typechecking being performed in the Assign
        - Fixed Memory Leak where Fuzzy Variables would not be freed
          because their fuzzy sets had a reference to them.  Changed
          the __Release method to free the fuzzy variable when its
          reference count equals the number of fuzzy sets in the variable
        - Fixed TIEDefinedTypes.Assign method, which was not properly
          replacing the types (causing facts based on old fuzzy variables
          to stay around and cause problems later)
        - Fixed TInferenceEngine ReplaceTemplate and RemoveDependency
          methods to clear out facts in a fact set when the fact template
          changes
        - Fixed TInferenceEngine.ReplaceDefinedType to properly create
          new fact templates containing the new types instead of the
          old types
        - Fixed TFactSet.Reset method to capture reparsing/cloning errors,
          which may occur because of defined type or fact template changes
          The fact string is left in the factset since this object is
          outside the engine
        - Fixed TIFuzzySet.FuzzyMinOperatorThreshold method in IFuzzyLogic.pas
          to see if value is greater than and EQUAL to the threshold, instead of
          just greater than
        - Initialized FuzzyEqualsThreshold in TInferenceEngine to above
          zero (0.01)
        - Added Automatic Rule Binding in TRule.Prepare method.  Now,
          actions can get the executing Rule Name by accessing the ?__RULE
          variable
        - Modified MiscPackage.TPrettyPrintFunction to return the pretty print
          string instead of sending to PrintOut
        - Fixed MiscPackage.TPrettyPrintFunction to resolve the argument
        - Modified the TModifyFunction in StandardPackage.pas to resolve all the
          fact before re-asserting... this fixes an error where modifying a
          multislot would not resolve functions in the new value

          Known Issues:
                - TDBInferenceEngine does not work with Fuzzy slots
                - Problem of retaining interpreted functions & fact sets that
                  could be loaded by the 'Edit Expert System...' Editor

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

February 2002    Version 2 EEP - Update 02

        - Added IEStringToString function (removes outer double-quotes) to
          IEHelperFunctions
        - Added datetime-str-format to the TDateTimeStringFunction in MiscPackage,
          suggested by E.P. (Thanks)
        - Fixed bug in TIEValue.GetToString where double-quotes inside
          a string are not prefaced with the escape character (\)
          (parse "(defrule myrule \"comment\" (phase) => (printout t phase))")
        - Added SEscapeChar constant to IEConsts.pas
        - Added TIEParseFunction in MiscPackage, which parses and executes its
          string argument


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

January 2002    Version 2 EEP - Update 01

        - Fixed TUniverseOfDiscourseFunction in FuzzyLogicPackage.pas, default
          FunctionName was not getting set properly, resulting in get-u-from
          function to not display its comment
        - Fixed TIEDefinedType.SetBaseTypes to create TIEFuzzyVariable
          class... not TIFuzzyVariable class.  It was causing errors
          in the pattern matching because the TIEFuzzySet.Equals method
          differs from TIFuzzySet.Equals method
        - Fixed IEHelperFunctions.GetFuzzySlot function for slot values which
          are float or integer
        - Fixed IEExpertSystemWizard.GetValueFromString function to correctly create a dtString
          value without the double-quotes


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

January 2002    Version 2 EEP

     Summary of Version 2 Major Features
        - New!  Database Support!  IECS is now database-aware through the
          TDBInferenceEngine component and TIEDataSet component
        - New!  Fuzzy Logic!  IECS now supports fuzzy expert systems and fuzzy
          inferencing
        - New!  Expert System Wizard!  Step-by-step guide to creating expert
          systems, with examples.  Available by right-clicking on TInferenceEngine
        - New!  Type Definitions!  IECS adds a new construct, the deftype, which
          allows you to define types that allow type inheritance, enumerations,
          range checking, and fuzzy sets.  At design-time, the
          TInferenceEngine.DefinedTypes property allows access to the new types
        - New!  User Function Wizard!  Wizard helps you quickly and easily create
          the code for defining a user function in the IECS
        - New!  Console Dialog!  IECS adds a new console dialog, similar to the
          Advanced Console Editor Demo
        - New!  Type Definition Editor!  Design-time and Run-time editor for the
          new deftype construct
        - New!  Over 60 New Functions, bringing the total to over 250 functions!
          New functions for dates and times, database, fuzzy logic, and more
        - Improved Expert System Execution!  IECS executes expert systems up to
          2.5x faster!
        - Improved Fact Template Redefinition!  IECS now works to keep facts and
          rules even when the fact templates they depend on have changed
        - Improved, Bigger, Faster Dialogs!  Dialogs have been made bigger (800x600)
          and in many cases been substantially improved, with additional sorting
          features, printer support, and type checking
        - Improved Parser Support!  IECS has improved support for defining and
          designing your own parser classes.  Dialogs now support new parsers!

          **********************************************************************
          NOTE TO VERSION 1.0 USERS: Version 2.0 has been optimized.  Most changes
          are transparent.  However, because of those optimizations, many event
          signatures have been changed to pass interface references by the
          const keyword (thus avoiding Add and Release function calls).  If you
          have used events in the IECS and get a compilation error, check your
          events!
          **********************************************************************

     Details
        - Created New Expert System Wizard - step-by-step guide to creating expert
          systems, with examples
        - Created New TInferenceEngine Component Editor, uses the console editor
          to allow the user to modify the component in the most flexible way
          possible
        - Created User Function Wizard
        - Created TDBInferenceEngine class - a data-aware version of TInferenceEngine
          with the ability to be connected to multiple TDataSources, where every
          TDataSource supplies one generated Fact Template and facts
                  - Created Icon for TDBInferenceEngine
                  - Created TIEDataLink class to manage data link between TDataSource
                    and the engine
                  - Created TDBIESlot class to encapsulate one TField/Fact Template
                    Slot mapping
                  - Created TDBIESlots class to manage a collection of TDBIESlot
                  - Created TDBIEDataConnection class to manage all details
                    for ONE TDataSource connection to the engine, including
                    data link and slots
                  - Created TDBIEDataConnections class to manage a collection of
                    TDBIEDataConnection
        - Created IEDBDx package to contain all the new database code
                  - Added IEDBDx to the IEDclDx package
                  - Created IEDBPropertyEditors.pas file for DB property editors
                    and created TSlotDataFieldProperty editor for
                    TDBIESlot.FieldName property
        - Added Fuzzy Logic (FuzzyConsts.pas, FuzzyLogic.pas, FuzzyInterfaces.pas,
          IFuzzyLogic.pas, and IEFuzzyLogic.pas)
        - Created FuzzyLogicPackage, containing 37 new functions: create-fuzzy-value,
          fuzzy-assert, fuzzy-assert-unconditional, fuzzy-union, fuzzy-union-x,
          fuzzy-intersection, fuzzy-intersection-x, get-fuzzy-correlation,
          get-fuzzy-inference, get-fs, get-fs-length, get-fs-x, get-fs-y,
          get-fs-variable, get-fs-value, get-u, get-u-from, get-u-to, get-u-units,
          get-fuzzy-auto-terms, set-fuzzy-auto-terms, get-fuzzy-threshold,
          set-fuzzy-threshold, get-activation-threshold, set-activation-threshold,
          moment-defuzzify, maximum-defuzzify, is-undecidable, get-compatibility-index,
          plot-fuzzy-value, set-fuzzy-correlation, set-fuzzy-inference, s, z,
          pi, tri, and beta
        - Created Database Package (TDBPackage), containing 7 new functions:
          duplicate-record, is-dataset-fact, modify-record, assert-record,
          assert-record-string, retract-record, and retract-record-string
        - Improved and new collection classes:
             - Created TIHashTable class, a hash table of interfaces, in InterfaceCollections
             - Created TFactsHashTable class to manage a hash table of IFact items
             - Added Indexing methods and properties to hash table classes in
               GHashtable and InterfaceCollections units: TGCustomHashtable,
               TGHashTable, TGStringHashTable, TIHashTable, and TIStringHashTable.
               The last access is cached so that if you are accessing the next or
               previous index (as in for-to and for-downto loops),
               these properties are fast.  MUCH more intuitive way to loop over
               entire hash table than iterators.  Also, you can loop backwards through
               the table and delete as you go without worry or slowdown.
             - Added overloaded ContainsKey methods to hash table classes: TGHashtable,
               TGStringHashtable, TIStringHashtable, TValueHashtable, TFactTemplates,
               and TRules.  Overloaded method contains a VAR parameter so that it
               returns the item at the same time as querying the hash table.
             - Added overloaded HasKey protected method in TGCustomHashtable, which
               contains a VAR parameter so that it returns the entry at the same
               time as querying the hash table.
             - Changed TIList.Add and TIList.Insert to pass interface as const
               to avoid extraneous AddRef and Release calls
             - Added TGCollectionItem to Structures.pas, works like TComponent in
               that you can have notifications between TGCollectionItem classes
             - Added overloaded TIList.AssignTo(TPersistent) method to implement
               ICloneable interface change
             - Added TGInterfaceList class to make a more efficient TInterfaceList
             - Changed TIList to descend from TGInterfaceList
             - modified all Clone methods in InterfaceCollections.pas to use
               Assign(TPersistent)
        - Created TGListBox class, descendant of TListBox, which displays a
          horizontal scroll bar when items are too long for control
        - Improved Fact Template replacement by reparsing as many facts and rules
          as possible with the new fact template
             - Added Replace method to TFactTemplates
             - Added ReplaceTemplate protected method to TInferenceEngine
             - Modified PutValue and Assign in TFactTemplates to use Replace
               instead of Remove method if possible
        - Improved TFactTemplatesEditDlg (FactTemplateEditorForm.pas)
             - Modified fact templates do not now automatically delete facts and
               rules by using the improved fact template replacement code
             - Added Type Editor, with button on toolbar
             - Made Dialog Larger (800x600)
             - Added Extended Type Info controls (TypeEditorFrame)
             - Added Print capability and PrintMargin Property
             - Modified SNotCorrectType exception to print the value that
               wasn't of the correct type
             - Fixed bug with default-dynamic attributes
             - Added UserFunctions property to allow dialog to properly set
               the local user functions to be the same as the calling engine's.
        - Improved TFactsEditDlg (FactEditorForm.pas)
             - Added type checking.  Fixed bug where user could enter
               invalidly typed data into a fact's slots.  Changed IE's
               TypeCheck property to perform static and dynamic checks
             - Added Sort By Index option to TFactsEditDlg
             - Added ID Row to Slot View of TFactsEditDlg
             - Modified TFactsEditDlg to attempt to preserve fact IDs by setting
               TFacts.PreserveIDs property.  This is useful so that the
               TDBInferenceEngine can detect when a fact is edited by the
               TFactsEditDlg
             - Fixed Sort By ID Bug in TFactsEditDlg (actually, it was
               sorting by Index)
             - Added Type Editor and Fact Template Editor, with buttons on toolbar
             - Added Button Toolbar and Options property to control it
             - Added Print capability and PrintMargin Property
             - Made Dialog Larger (800x600)
             - Sped up the initial assignment of facts
             - Changed lbFacts to a TGListBox so that a horizontal scrollbar
               can appear when facts are too big
             - Fixed bug where default-dynamic fact slots were not being
               resolved when adding facts
        - Improved TRulesEditDlg (RuleEditorForm.pas)
             - Added Type Editor and Fact Template Editor, with buttons on toolbar
             - Fixed PopupMenu bug in RuleEditorForm where the Fact Templates PopUp
               would show Delete Rule item
             - Added Button Toolbar and Options property to control it to RuleEditorForm
             - Added Print capability and PrintMargin Property to RuleEditorForm
             - Fixed DragDrop events in RuleEditorForm to properly insert a string
               based on the parser instead of hard-coded
             - Fixed UpdateCurrentRule in RuleEditorForm to use ParseRulePatterns and
               ParseRuleActions methods in order to be parser independent
             - Added OneShot Checkbox to RuleEditorForm
             - Made Dialog Larger (800x600)
             - Added Delete Menu Item to pop up menu in RuleEditorForm
             - Fixed Rules, which were not being sorted in tree, in RuleEditorForm
             - Fixed Fact Templates, which were not being sorted in tree, in RuleEditorForm
             - Fixed bug in RuleEditorForm where user functions added at design-time
               did not show up
             - Fixed "Invisible window cannot receive focus" bug in RuleEditorForm
             - Replaced lbIF and lbTHEN TListBox components with TGListBox in order to
               fix too long items being truncated in the listbox
             - Fixed "disappearing" empty line (new line) in IF and THEN listboxes
        - Added SNotCorrectSlotType error string to IEConsts.  Modified TFact.SetValue
          procedure to raise this error instead of SNotCorrectType.  Modified
          TIEClipsParser.ParseSlot and ParseFact to use this value as well
    - Changed the names of the packages, removing version numbers, uses the Delphi 6
      version numbering instead
        - Added default keyword to many properties so that Delphi won't
          store default property values in the DFM
        - Fixed backward chaining pattern bugs.  When a backward-chaining pattern
          is added to a rule, a "not" for the pattern is added automatically to ensure
          the rule won't fire if the non-backward-chaining pattern exists.  This
          worked correctly.  However, PrettyPrint(TRule) printed the "not" pattern
          and the TRule.SetPatterns and RuleEditorForm.UpdateRuleEditor did not
          ignore it causing lots of "not" patterns to build up in the rule
        - Fixed access violation for components on different forms or modules.
          Created/Modified SetEngine methods to add and remove free notifications
          for the components so that they can be notified when engines are freed
        - Fixed design flaw where TInferenceEngine events were being
          called from outside the TInferenceEngine (except for OnParse...
          events).  Added numerous protected methods inside TInferenceEngine
          for firing the events.  The previous design made it difficult for
          a component writer to override TInferenceEngine if they wanted
          to do some action on that event.  For example, TFactTemplates.Clear
          was firing the OnClearFactTemplates event directly.  Now, it
          calls the protected TInferenceEngine.ClearFactTemplates method,
          which fires the event.  Added protected methods: AddRule, BeginInference,
          ClearFactTemplates, ClearRules, EndInference, NewFactTemplate, and
          RemoveFactTemplate
        - Created InferenceEngineDBReg.pas file to register database classes
        - Created Defined Types Editor Dialog (TIETypesEditDlg)
        - Created Defined Types Editor Frame (for use by TIETypesEditDlg and
        - Added functions to IEHelperFunctions:
                CreateArgumentExpressions function
                overloaded CalculateHash Function
                GetFuzzySlot function
                GetFuzzySetFromValue function
                GetIETypeName function
                FloatEquals Functions
                IsSubmenuVisible Function
                SwapEvents procedure
                StringFilter function
    - Added TDefinedTypesProperty Editor to IEPropertyEditors
        - Improved Parsing and Printing Code
             - Changed TIEParser and TIEClipsParser's Parse and ParseExpression methods to have
               Execute parameter (default = True) controlling if parsed funcalls
               should be executed.
             - Added Enabled Property to TIEClipsParser.ParseRule and TIEClipsParser.PrettyPrint rule
             - IFunCalls may now be commented... all commented whitespace BEFORE
               the function call is used
             - Patterns may now be commented... all commented whitespace BEFORE
               the pattern is used
             - Modified TIEClipsStream to set IStreamToken.WhiteSpace property
             - Modified TIEClipsParser.ParseFunCall to set Comment property from
               whitespace of first token (comments BEFORE the function call)
             - Modified TIEClipsParser.ParsePattern to set Comment property from
               whitespace of first token (comments BEFORE the function call)
             - Modified PrettyPrint(IFunCall) to print out function call comment
             - Modified PrettyPrint(TIEPattern) to print out pattern comment
             - Fixed PrettyPrint(Rule, Construct) to indent multi-line function calls
               properly
             - Added TIEClipsParser.GenerateVariable and GenerateVarName methods
             - Added TIEClipsParser.ParseRulePatterns and ParseRuleActions methods
             - Added TIEClipsParser.PrettyPrint(TRule;TRuleConstruct) method and
               PrettyPrint(TRule;TRuleConstruct) function
             - Fixed bug in automatic pattern match generation for multislots,
               (phase (create$ 1 2 3)) would incorrectly create a VARIABLE
               instead of a MULTIVARIABLE test
             - Added TIEClipsParser.GetSyntaxStatement method
             - Modified PrettyPrint(IUserFunction) function to accept
               SyntaxString as well
             - Modified functions to create TIEValues by passing
               into constructor the value (faster creates)
             - Improved parsing speed of ParseFactSet and ParseRule by replacing
               try-except blocks with smart try-finally blocks
             - Modified PrettyPrint(IFactTemplate) function to print is-a string,
               and to not print default slot
             - Modified PrettyPrint(TFactSet), PrettyPrint(IFactTemplate), and
               PrettyPrint(TRule) functions to not print empty comments
             - Modified TIEClipsParser.ParseError method to truncate source
               text when it is greater than 255 characters.  It creates a string
               containing the first 128 characters and then the last 128 characters
             - Added ParseSingletons & PrettyPrint(ISingletonsVector) methods to
               TIEClipsParser & unit
             - Added brackets [] as delimiters in TIEClipsStream
             - Modified ParseValue to correctly parse fuzzy singletons,
               "((1 2) (3 4))", instead of bad funcall
             - Added SlotFunctions property (tells parser which function calls
               need fact slots parsed (like assert and modify)
               SlotFunctionStart = 0 means that ParseFact
             - Modified ParseFunCall to look at SlotFunctions
             - Fixed Multislots in fact templates to use type information
             - Fixed TIEClipsStream.MoveToNextConstruct method to properly
               find the last construct when near end of file
             - Added PrettyPrint(Fact,SlotName) and PrettyPrint(Fact,SlotName,Value)
               methods to TIEClipsParser and unit
             - Fixed bug in PrettyPrint(IFactSlot) so that it correctly outputs
               default-dynamic attributes
             - Added PrettyPrint(DefinedType) and ParseDefinedType methods
             - Modified ParseRule to parse the new OneShot property
             - Modified PrettyPrint(TRule) to print the new OneShot property
               Also doesn't print rule properties (declare...) if properties
               are the default
             - Added ParseDefinedType, ParseFuzzySet, and ParseFuzzyVariable methods to TIEClipsParser
             - Added OnParseDefinedType, OnParseFuzzySet, and OnParseFuzzyVariable
               events to TIEClipsParser
             - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and
               PrettyPrint(IFuzzyVariable) methods to TIEClipsParser
             - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and
               PrettyPrint(IFuzzyVariable) functions
             - Fixed PrettyPrint(IFactSlot) to use new default-dynamic property,
               multislots were not getting printed properly
             - Added Whitespace property and accessor methods to TIEStreamToken
             - Added TIEParser.GenerateVariable method
             - Added TIEParserClass type
              - Added TIEParser.ParseRulePatterns and ParseRuleActions methods
             - Added TIEParser.PrettyPrint(TRule;TRuleConstruct) method
             - Added TIEParser.GetSyntaxStatement method
             - Added ParseSingletons & PrettyPrint(ISingletonsVector) methods to TIEParser
             - Added OnParseSingletons event to TIEParser
             - Added ParseDefinedType, ParseFuzzySet, and ParseFuzzyVariable
               methods to TIEParser
             - Added PrettyPrint(Fact,SlotName) and PrettyPrint(Fact,SlotName,Value)
               methods to TIEParser
             - Modified TIEStreamToken.Clone method to unambiguously call the
               new Assign Method
             - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and
               PrettyPrint(IFuzzyVariable) methods to TIEParser
             - Added OnParseDefinedType, OnParseFuzzySet, and OnParseFuzzyVariable
               events to TIEParser
             - Modified TParseFactEvent, TParseFactTemplateEvent, TParseFunCallEvent,
               TParseFunctionEvent and TParseVariableEvent to pass interfaces
               by const
             - Added ParseFactSlot method to TIEParser and TIEClipsParser
             - Fixed bug in TIEClipsParser ParseFact and ParseFactSlot methods
               where an integer value could not be assigned to a float slot when
               dynamic type checking was on
             - Fixed bug in TFact.SetValue where an integer value
               could not be assigned to a float slot when dynamic
               type checking was on
        - Improved and New Dialog Components
             - Added TConsoleDialog component
             - Added EnableXXXXEditor properties to TFactTemplatesDialog,
               TFactsDialog, and TFactSetDialog
             - Added TDefinedTypesDialog component
             - Created/Modified SetEngine method to add and remove free notifications
               for TFactsDialog, TFactSetDialog, TFactTemplatesDialog, TFunctionsDialog,
               TRulesDialog so that it can be notified when engines NOT
               on current form/module are freed
             - Correctly set UserFunctions property in TFactTemplatesDialog
             - Changed TRulesDialog to assign entire IE to the form's IE.  This
               prevents an error where the TRulesEditDlg could parse a rule
               (because it had no facts to match patterns and fire a "test"
               predicate) but the copy back to the engine would fail.
             - Fixed bug in TFactsDialog where dialog would throw away duplicate
               facts even if user wanted them
        - Improved TInferenceEngine component and collections
              - Changed TInferenceEngine.Parse method to have
                Execute parameter (default = True) controlling if parsed funcalls
                should be executed.
              - Fixed TFactSets bug where adding or removing would set TFactSet.Engine
                property properly
              - Fixed TFactSets.Add method bug where factset of same name didn't
                replace old factset
              - Fixed Salience bug in TInferenceEngine.SearchSalience method
              - Added TInferenceEngine.TokenizerType property
              - TInferenceEngine.Parser property is now writable
              - Added TInferenceEngine.ParseRulePatterns and ParseRuleActions methods
              - Added TInferenceEngine.PrettyPrint(TRule;TRuleConstruct) method
              - Added Load/SaveDefinedTypes methods to TInferenceEngine class
              - Added MinActivationStrength property to TInferenceEngine class
              - Added FuzzyEqualsThreshold property to TInferenceEngine class
              - Modified Assert(Fact) to include a default parameter for
                unconditional fuzzy asserts
              - Added Assert( Fact, FuzzyInferenceMethod ) method
              - Added FuzzyUnion and FuzzyIntersection methods
              - Surfaced Parser Property in TInferenceEngine
              - Modified TIOStreams to descend from TGStringHashTable
              - Added TInferenceEngine.Assert(Fact, FuzzyInference) method
              - Added FuzzyInference and FuzzyCorrelation methods to TInferenceEngine
              - Added FuzzyInferenceMethod and FuzzyCorrelationMethod properties to TInferenceEngine
              - Added OnFuzzyInference and OnFuzzyCorrelation Events to TInferenceEngine
              - Added TFuzzyCorrelationEvent type
              - Added ParseFactSlot method to TInferenceEngine
              - Optimized TFacts.IndexOf and FindFact(ID) to take advantage
                of facts being sorted by ID
              - Modified TFacts.FindFact method to pass fact by const
              - Modified TInferenceEngine.Assert and retract methods to pass fact by const
              - Modified TRules to be able to assign to TTreeNodes
              - Modified TFactTemplates to be able to assign to TTreeNodes
              - Added TIEDefinedTypes class to hold hash table of defined types
                for TInferenceEngine
              - Added DefinedTypes property to TInferenceEngine
              - Added OnClearDefinedTypes, OnRemoveDefinedType, OnAddDefinedType
                events to TInferenceEngine
              - Fixed TFactTemplates.GetToString method to properly order
                fact templates to avoid child fact templates being printed
                before parent fact templates
              - Modified TUserFunctions.PutValue, Clear and Remove methods to
                set the number of interpreted functions in the hash table as
                well as set the Add order of the interpreted function
              - Added PrettyPrint(Fact,SlotName) and PrettyPrint(Fact,SlotName,Value)
                methods to TInferenceEngine
              - Fixed TUserFunctions.Assign to correctly copy interpreted functions
              - Fixed bug with TFactSets.Assign to clone the TFactSet instead
                of just adding it
              - Added PrettyPrint(IIEDefinedType), PrettyPrint(IFuzzySet) and
                PrettyPrint(IFuzzyVariable) methods to TInferenceEngine
              - Added OnParseDefinedType, OnParseFuzzySet, and OnParseFuzzyVariable
                events to TInferenceEngine
              - Added ParseDefinedType, ParseFuzzySet, and ParseFuzzyVariable
                methods to TInferenceEngine
              - Fixed bug in TInferenceEngine.PrintOut, where printing out to
                other streams than default would produce gibberish
              - Modified TIOStreams to be a TGStringHashtable instead of a
                TGStringList, deleted IOStream property from TInferenceEngine
              - Modified TFactTemplates.FillNodeSlot method to have default
                parameter specifying if the node passed in is a parent node (Default)
                in which case create the child node, or not, in which case replace
                the node.
              - Added PreserveIDs property to TFacts (Default=False).  If this property
                is True, the TFacts object attempts to use the same Fact ID of the
                fact when it is added.  This property is used by the TFactsEditDlg at
                the cost of speed.
        - Improved Packages and New Functions
            PredicatePackage
              - Added FuzzyP to TVerifyTypePFunction
              - Added TGetValueTypeFunction
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
            StringPackage
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
              - Fixed Uppercase and lowercase functions to return
                string as correct type (e.g., when input is an
                atom, should return an atom)
            TrigonometryPackage
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
            MathPackage
              - Added Randomize Function
              - Modified Random Function to accept from and to parameters
              - Modified PI Functionname to be "PI", instead of "pi"
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
            ObjectPackage
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
            BusinessPackage
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
              - Modified functions to create TIEValues by passing
                into constructor the value (faster creates)
            MiscPackage
              - Added TGuardFunction
              - Added TListDefTypesFunction
              - Added TDateTimeStringFunction, TSystemDateTimeFunction,
                DecodeDateTimeFunction, and EncodeDateTimeFunction
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
              - Modified functions to create TIEValues by passing
                into constructor the value (faster creates)
              - Modified TPrettyPrintFunction to print deftypes as well
              - Added PrettyPrint property and logic to TPrettyPrintFunction
              - Modified TIEUserFunction Descendant Classes to set the
                ArgumentString property
            StandardPackage
              - Added TGetSlotValueFunction
              - Added TMemberFunction
              - Fixed Member function, which had always returned 0.  Also corrected its
                help comment
              - Fixed Fetch Function for when the variable is not there (supposed
                to return FCNil instead of erroring)
              - Added Argument String property (and accessor methods) to
                TIEUserFunction and TCustomUserFunction
              - Modified TGtFunction, TGtOrEqFunction, TLtFunction,
                and TLtOrEqFunction Call methods to more efficiently
                compare more than 2 items
              - Fixed TFormatFunction to correctly accept floating point numbers
              - Fixed bug in TSetFactDuplicationFunction, where it
                did not resolve the argument before checking for
                equals to FALSE
              - Modified Comments for TGetFactDuplicationFunction and
                TSetFactDuplicationFunction, they incorrectly specified the exact
                OPPOSITE behavior
        - Improved function calls
              - Added Comment property and accessor methods to TFunctionCall
              - Added TFunctionCall.Assign(TPersistent) overloaded method
              - Modified SNotCorrectType exception to print the value that
                wasn't of the correct type
              - Added DeleteArgument and ClearArguments to TFunctionCall class
              - Added Argument String property (and accessor methods) to
                TIEUserFunction and TCustomUserFunction
              - Modified TInterpretedFunction to comply with interface changes
        - Added Equals method to TBindingInfo and TBinding
        - Modified TIEContext.Resolve method to properly resolve Fuzzy
          expressions
    - Created TBindingInfo class to hold binding information.  This
          class replaces the variant array we used to put in IIEValue
        - Modified TBinding class to descend from TBindingInfo class
        - Added TIEContext.Resolve(IFact) method
        - Changed TBinding constructor to accept const Value instead of
          just value
        - Modified TIEContext.AddGlobalBinding, AddLocalBinding,
          AddBinding, ExpandList, and FlattenList methods to pass IIEValue by const
        - New Constants (IEConsts.pas)
              - Added DefaultPrintMargin for dialogs
              - Added TIEDialogOptions for dialogs
              - Modified SNotCorrectType exception to print the value that
                wasn't of the correct type
              - Changed some constants to vars (e.g., SDefaultSlotName).  Users
                should be able to change what is used to what matches best for
                their needs.
              - Modified CommentFormat string to take out syntax statement
              - Added SyntaxFormat and CLIPSSyntaxFormat resource strings
              - Added Resource String constants and TIETypes constants
                (such as IEAlwaysValidTypes)
              - Added FloatFormatStr
              - Added TValueConstraint and TValueConstraints types
              - Added Constraint resource strings
              - Added SExpectedRuleProperty resource string message
              - Added TValidAction, TValidActions, TValidView, and
                TValidViews types
        - Improved Rete Pattern Matching class (TReteNetwork) and support classes
              - Fixed bug with TReteNetwork.UpdateNodes method where adding rules
                after facts would sometimes not activate the rules properly
              - Modified TPatternMatchTerminalNode.AddActivation method to
                supress activations of disabled rules
              - Modified TPatternMatchNode.CallNode method to catch exceptions
                and append node information on them so that the user may know the
                exception happened in a rule pattern match
              - Added NodeMatchClass, NodeTestClass, NodeJoinClass, and
                NodeTerminalClass properties to TReteNetwork class.  The
                TReteNetwork class uses those properties to control what nodes
                it makes when it is compiling a rule
              - Added Salience to the TActivation.GetToString method (complies
                with CLIPS better).
              - Reordered TPatternMatchTest enumeration to group tests better,
                rewrote case statement in TPatternMatchNode.CallNode method for optimization
              - Added Strength property (strength of rule activation, applies
                to fuzzy rules) to TActivation class
              - Modified TActivation constructor to accept Strength parameter
                which defaults to 1.0
              - Fixed TJoinNode.CallNode method to correctly call TIETokenTree.Add
                method
              - Modified the ToString returned from a TJoinNode
              - Fixed TReteNetwork.AddRule to remove the rule if there is an
                exception
              - Modified TPatternMatchTerminalNode.AddActivation to not add
                activation if rule's HasFired and OneShot properties are true
              - Fixed TJoinNode.CallNode method to correctly call TIETokenTree.Add
                method
              - Optimizations
                    - Changed TReteNetwork CallChildren and Evaluate methods to
                      pass Token by const
                    - Changed Nodes' CallNode methods to pass Token by const
                    - Changed TPatternMatchTerminalNode AddActivation and
                      StandDown methods to pass Token by const
                    - Changed TJoinNode AskForBackChain, RunTestsVaryLeft, and
                      RunTestsVaryRight methods to use const
                    - Changed TTestNode AddTest methods to pass Value by const
                    - Got rid of "AS" casting where it wasn't necessary
                    - Modified TJoinNode.RunTestsVaryLeft and RunTestsVaryRight
                      methods to check if token tree is empty before executing
                    - Modified TJoinNode.DoRunTestsVaryLeft and DoRunTestsVaryRight
                      methods to use TIETokenTree's LowIndex and HighIndex properties
              - Added Strength property to TIEToken
              - Added ToString and ToFactsString properties to TIETokenTree
              - Optimizations to TIEToken/TIETokenTree
                    - Added LowIndex and HighIndex properties to TIETokenTree,
                      indicates the parts of the table that contains data
                    - Changed TIETokenTree's Add and Remove methods to pass
                      Token by const
                    - Modified TIEToken Constructors, Assign, and Equals methods
                      to pass interfaces by const
        - Improved and New Interfaces (Note that changes to interfaces may require
          changes for v1.0 users)
              - Optimization!  Modified method signatures so that interfaces are
                passed using the const keyword
            CommonInterfaces
              - Added overloaded AssignTo(TPersistent) method to
                ICloneable interface
          - Added Assign( TPersistent ) method to ICloneable
              - Modified ICloneable to pass interfaces by const
              - Added TINotifyEvent signature
            IEInterfaces
              - Added Comment property and accessor methods to IFunCall
              - Added Whitespace property and accessor methods to IStreamToken
              - Added DeleteArgument and ClearArguments to IFunCall Interface
              - Added Argument String property (and accessor methods) to
                IUserFunction
              - Added HashCode property and read accessor method to IFactTemplate
              - Added Overloaded ContainsUserFunction method to IReasoner interface
              - Added ISingletonsParser and ISingletons interfaces
              - Added Strength property to IReteToken
              - Modified most interfaces to pass around parameters by const
                (IUserFunction, IInterpretedFunction, IReasoner, IValueVector,
                IFactSlot, IFactTemplate, IFact, IFunCall, IIEValue, IReteToken)
              - Added Fuzzy property to IFactTemplate
              - Added ContainsType method to IFactTemplate
              - Added OnChange Event to IIEValue interface
              - Added IIEDefinedType interface
              - Added Fuzzy and NumFuzzySlots property and accessor methods
                to IFactTemplate
              - Added DefaultDynamic property (and accessor methods) to IFactSlot
        - Improved Facts, Fact Templates and Patterns classes (IEFacts.pas)
              - Added Comment property to TIEPattern
              - Modified TFactTemplate Assign statements to NOT copy the tag
                property
              - Added protected TIEPattern.AddTest method, which is called by the public
                AddTest and SetTests
              - Added protected TIEPattern.CreatePatternMatchTest methods, which
                are called by the AddTest and SetTests methods
              - Added Two overloaded TIEPatternMatchTest.Equals methods
              - Added HashCode property and read accessor method to TFactTemplate
              - Modified functions to create TIEValues by passing
                into constructor the value (faster creates)
              - Added TFactCombineEvent type
              - Fixed TFactSet.Reset method to properly resolve the facts before
                asserting them
              - Added Fuzzy property to TFactTemplate
              - Added ContainsType method to TFactTemplate
              - Added DefaultDynamic property (and accessor methods) to TFactSlot
              - Modified TFactTemplate.Clone method to unambiguously call the
                new Assign Method
              - Fixed TFactTemplate's AssignSlots method which would get into
                trouble if the fact slot being cloned had a funcall from
                another engine
              Optimizations
                  - Modified TIEPattern internal tests structure to sort by
                    slot name
                  - Modified TFact constructors to pass interfaces by const
                  - Modified TFactTemplate constructors to pass interfaces by const
                  - Modified TIEPattern constructors to pass interfaces by const
                  - Modified TIEPatternMatchTest constructors to pass interfaces by const
                  - Modified TFactSet.Add, IndexOf, and Remove methods to pass
                    interfaces by const
                  - Created TFactValues hash table (and associated
                    TFactValueHashtableEntry and TFactValueHashtableEnumerator)
                    to hold the values for a TFact AND the slot (gets rid of
                    of slot check overhead)
        - Improved IEValue.pas
              - Fixed bug in TIEValue.GetAsInteger where it would not convert
                a string float to an integer
              - Added IsValueConstant function to determine if a IIEValue IS
                (not EQUALS) a value constant, e.g., FCTrue, FCFalse, etc.
              - Modified SNotCorrectType exception to print the value that
                wasn't of the correct type
              - Modified functions to create TIEValues by passing
                into constructor the value (faster creates)
              - Added overload constructors to TIEValue
              - Added OnChange Event to TIEValue
              - Added TSingletonsVector class
              - Fixed bug in TIEValue.Resolve method for pattern bindings
              - Removed AsIntArray, AsStringArray
                and AsVariantArray properties and accessor methods from
                IIEValue interface to make it compatible with C++Builder
              - Added AsOwnedObject array to IIEValue interface
              - Added TValueVector.Assign(TPersistent) method to fulfill the
                ICloneable interface changes... just raise exception since
                TValueVector is not a TPersistent descendant
              - Added Changed method to TIEValue
              - Added AsFuzzy property (and accessor methods) to TIEValue
        - Improved TRule class
              - Added Enabled property to TRule
              - Fixed TRule.AddPattern to correctly insert the index of the pattern
                into bindings (if the Pattern was insert instead of added to the
                pattern list trouble could happen)
              - Fixed TRule.AddBinding to not add a binding already in the
                bindings
              - Added overloaded TRulePatternList.IndexOf(IFactTemplate) method
              - Modified TRule Prepare, Fire and SetSalience methods to pass
                interfaces by const
              - Modified TRuleActionList Add, Remove, IndexOf and Insert methods
                to pass interfaces by const
              - Added HasFired and OneShot Properties to TRule.  OneShot property
                controls whether the Rule will stop activating after the
                first rule fire




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

February, 2001    Version 1.11

        - Modified TIEInnerFunction to be more generic.  Now, you can use
          TIEInnerFunction to connect to ANY TObject.  Also, one component
          can now act as multiple IUserFunctions using one TIEInnerFunction object
          per IUserFunction connection
              - Changed Constructor to accept TComponent instead of TCustomUserFunction
              - Changed Owner property to TComponent from TCustomUserFunction\
              - Added OnCall event for non-TCustomUserFunction components
              - Changed Call method to call TCustomUserFunction.Call method directly
                if Owner is TCustomUserFunction.  Otherwise, the new OnCall event
                is triggered
              - Fixed TIEInnerFunction Notification method to check properly for
                removal of owner (Someone could have overridden TIEInnerFunction
                and connected to the TIEFunctionNexus causing this method to
                erroneously nil the Owner)
        - Fixed bug in RuleEditorForm.pas where could not add or replace facts
          because of embedded spaces in meSalience.  This bug was introduced in
          in v1.1 when salience became a TMaskEdit instead of TSpinEdit

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

December 9th, 2000    Version 1.1

        - Improved CLIPS support with the addition of 36 functions (see below)
        - Modified code to improve future C++Builder support
                   - All TIEUserFunction descendants override AfterConstruction
                     instead of the constructor now (except for multi-function
                     objects like TPrettyPrintFunction) because FunctionName
                     and SetMin/MaxArgumentCount are virtual
                   - Made TFactTemplate Assign( IUnknown ) and AssignSlots
                     non-virtual.  There was no reason to have them
                     virtual and could cause problems with C++Builder
                     users
                   - Moved call of TUserPackage.CreateFunctions from its
                     constructor to AfterConstruction method
                   - Moved TInferenceEngine.AddDefaultPackages and
                     Assert calls from constructor to AfterConstruction
                   - Moved Event clearing and Clear call code in
                     TInferenceEngine.Destroy to BeforeDestruction
                   - Moved Reset call in TIEValue.Destroy to BeforeDestruction
                   - Moved StandDown call in TPatternMatchTerminalNode.Destroy
                     to BeforeDestruction
                   - Changed seSalience (TSpinEdit) to meSalience
                     (TMaskEdit) in RuleEditorForm since C++Builder does not
                     have a TSpinEdit
        - New! Created a TTrigonometryPackage containing 37 new user functions.
          The new functions are: acos, acosh, acot,
          acoth, acsc, acsch, asec, asech, asin, asinh, atan, atan2, atanh, cos,
          cosh, cot, coth, csc, csch, cycle-rad, deg-grad, deg-rad, distance,
          distance-sqr, distance-manhattan, grad-deg, grad-rad, hypotenuse,
          rad-cycle, rad-deg, rad-grad, sec, sech, sin, sinh, tan, and tanh
        - New! Created a TBusinessPackage containing 12 new user functions.
          The new functions are: double-declining-balance,
          future-value, interest-payment, interest-rate, internal-rate-of-return,
          net-present-value, number-of-periods, payment, period-payment,
          present-value, sln-depreciation, and syd-depreciation
        - New! Added 6 new user functions (Batch, Dribble-On, Dribble-Off, Duplicate,
          Rename and Remove) to TStandardPackage
        - Added Batch (2), StartCapture(2), and StopCapture methods to
          TInferenceEngine
        - Added InputStream and OutputStream read-only
          properties to TInferenceEngine
        - Modified TIEClipsParser to accomodate "duplicate" command syntax
          (similar to "modify" command syntax)
        - Added printout statements to TIEClipsParser.ParseExpression for
          dribble/captures, deleted them from OnParse events in Console apps
        - Updated Help File for all the changes

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

October 5, 2000      Version 1.01

        - Set OnEndInference and OnStartInference events to nil in
          TInferenceEngine destructor (Could lead to bugs)
        - Fixed bug where TInferenceEngine would free rules that
          it didn't own (such as a design-time TRule) when the
          rule was removed
        - Fixed bug in Advanced Console and Basic Console demos where
          inference engine events could try to access non-existent controls
          if the controls were freed before the engine


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

August 31, 2000      Version 1

        - Renamed Delphi 5 packages to include a D5 on end (like the Delphi 4
          packages)
        - Unified Graph classes
                  - TGCustomGraph unified
                  - New classes: TGGraph (Tlist based Graph) and TGLabelGraph
                    (TGStringHashTable based Graph)
                  - Changed TGGraphNode ancestor from a TComponent to a TPersistent
                    (faster and smaller memory footprint)
        - Modified TReteNetwork to descend from new TGGraph instead of TGCustomGraph
        - Fixed "Losing rules" Rule editor bug
        - Fixed Freeform rule editor bug where changes would not be saved unless
          the view was changed back to the listbox
        - Added OnStartInference and OnEndInference events to TInferenceEngine
        - Finished Help File

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

June 21, 2000      Version 1 - Beta 02

        - Fixed many memory leaks (parsing error leak, activation leak, pattern
          slot test leak, and fact template/fact template slot leak)
        - Deleted IFactSlotOwner interface as it was no longer used (using the
          interface caused a circular interface reference where the slots would
          reference the template and the template the slots, and neither would be
          freed.  sigh. :)  )  Added GetTemplateName to IFactSlot which was what the
          IFactSlotOwner was used for mostly anyway.
        - Added show-message, input-box, input-query, and message-dlg functions
          to miscellaneous package
        - Added AddLocalBinding to TIEContext - fixes bug where rules and interpreted
          functions could stomp on other bindings
        - Added TBindings class to track TBinding objects, added it to TIEContext.
        - Defined Comment property for all user functions in the inference engine
        - Added a MoveToNextConstruct method to TIETokenizerStream and TIEClipsStream
        - Added ability of parsers to stop on first error on continue until finished.
          Required adding properties ErrorHandling and MaxErrors to TIEParser &
          TIEClipsParser and properties ParserErrorHandling and ParserMaxErrors
          to TInferenceEngine
        - Added DuplicateConstructs property to TInferenceEngine.  It controls
          what happens when attempting to add duplicately named constructs.  Allows
          easy importing of duplicate expert systems where only the data has changed
          or a few rules added.
        - Changed behavior of TInferenceEngine.Clear method to NOT clear out the
          user functions.  Makes more sense and clear method is much faster
          since it doesn't free and reallocate all the functions.  Clear method still deletes
          IInterpretedFunctions though.
        - Changed behavior of TInferenceEngine.LoadFromStream to not call clear before
          parsing
        - Added class TUserFunctions, a hash table of user functions for the
          TInferenceEngine component
        - Changed TInferenceEngine.UserFunctions from a TIStringHashTable to
          TUserFunctions
        - Added SlotCount read-only property (with method) to IFactTemplate and
          TFactTemplate
        - Added write accessor methods for Max/MinArgumentCount and FunctionName
          to IUserFunction
        - Added IStreamable and IDTStreamable interfaces to CommonInterfaces unit
        - Updated Inference Engine Help File
        - Updated Common Help File
        - Decided ES will NOT output TInferenceEngine properties by default... so
          it's no longer a bug :)
        - MAJOR revisions to user functions in inference engine architecture:
        - Changed TUserFunctionList from a TComponentList descendant to
                  TIList.  Means that TUserPackage only holds interfaces for functions
                  and will only stream functions that also implement new IDTStreamable
                  interface
                - Changed TCustomUserFunction.  It no longer implements IUserFunction
                  and descends from TComponent instead of TCustomReasonerOwner.
                  However, it still provides design-time implementation of user
                  functions.
                - Added new class TIEUserFunction which implements IUserFunction
                  and IDTStreamable.  Makes user functions lighter weight since
                  they descend from TPersistent instead of TComponent/TCustomReasonerOwner
                - Added new class TIEInnerFunction (descends from TIEUserFunction)
                  which implements the IUserFunction interface for TCustomUserFunction.
                  This fixes a MAJOR bug where TCustomUserFunction could be freed
                  but interface references would still be around.
                - Changed TInterpretedFunction to descend from TIEUserFunction
                  instead of TCustomUserFunction
                - Changed name of TReasonerList to TBaseReasonerList and changed
                  Owner of the list to type TIEUserFunction.  Added new
                  TReasonerList which descends from TBaseReasonerList to change
                  the Owner to a TUserPackage.
        - Fixed TInferenceEngine.Assign method bug
        - Fixed bug where functions could be freed but the architecture would
          still contain references to them (access violation)
    - Fixed bug with multiple NOT rule patterns (not (not ...))
        - Fixed bug with EXISTS keyword in rule patterns
        - Fixed bug where design-time rules and fact templates would not trigger
          initial events for TInferenceEngine (Just reordered properties for
          proper loading)
        - Fixed misreported line number with parsing errors
        - Fixed bug with UNIQUE keyword in rule patterns
        - Fixed bug so that fact templates have one default slot if none is
          specified when the fact template is added to TInferenceEngine

    Known Bugs
        - Still Need to update help files

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

May 18, 2000    Version 1 - Beta 01

    - Added Expected to EIEParseException, moved to IEParser
    - Added ExplicitCreateTemplate and TypeCheck to TIEParser
    - Added TypeChecks to IE, get/set-dynamic/static-constraint-checking functions to Misc Package
    - Added Max/MinArgumentCount, GetToString to IUserFunction and TCustomUserFunction
    - Added IInterpretedFunction
    - Modified TInterpretedFunction
           - ActionValue and ActionValueCount are now Statement and StatementCount
           - AddAction and AddValue are now AddStatement
           - Argument now returns IIEValue
           - Binding and BindingCount are gone
    - Added PrettyPrint methods for IUserFunction and IInterpretedFunction to
           - TInferenceEngine
           - TIEParser and TIEClipsParser and IEClipsParser Unit
    - Added ppdeffunction to MiscPackage
    - Modified SaveFacts to save only some fact templates
    - Added SaveFacts and SaveStream for fact templates to TInferenceEngine
    - Fixed Salience in TInferenceEngine
    - Fixed Rule Editor bug where Hitting Replace and rule is invalid loses old rule
    - Fixed bug for Dragging and dropping entire template onto edit box, too many parentheses
    - Added slot TYPE in building fact templates!
    - Fixed bug where outputing ES does not include deffunctions

    Known Bugs
        - Still Need to update help files
        - NOT NOT patterns and Exists Are buggy
        - Unique Pattern bug, doesn't work
        - Outputing ES does not output properties like (get-reset-globals)


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

May 1, 2000    Version 1 - Beta 00

    Original Beta Version
    Known Bugs
        - Help Files Incomplete
Send mail to webmasterNO@SPAMRiverSoftAVG.com with questions or comments about this web site.
Copyright © 2002-2023 RiverSoftAVG
Last modified: November 20, 2023