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.



			


			


			


			


			

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

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-2017 RiverSoftAVG
Last modified: April 2, 2017