
        -=-  -=-  -=-  -=- MagicStats 2.0 Change Log -=-  -=-  -=-  -=-
Version 2.0pr14:                                                        3/12/01
  1. 11/20/00 - Made the source "-W clean".  Now we compile with -W & -Wall.
  2. 12/04/00 - Made the DailySummaryPlugin work correctly for monthly pages.
  3. 03/02/01 - Fixed a crasher in AccessLog.cpp
  4. 03/12/01 - Do not parse -I,-D commandline args, don't print them for -H
  5. 03/12/01 - The Dejavu theme is significantly cleaned up and nicer.  Now
                the referrer section should not contain self referring URLs.
  6. 03/12/01 - New, simpler, syntax for specifying themes is implemented:
                instead of [theme:name] you can now just use [[theme]]

Version 2.0pr13:                                                       11/19/00
  1. 11/11/00 - Made the count plugin ignore the string ""
  2. 11/11/00 - Added way cool functionality to the skel file parser to allow
                it to handle very complex function expressions and evaluations,
                including passing functions to functions, partial evaluation,
                and several useful built in functions.
  3. 11/12/00 - Fixed the Fancy theme so that it filters out referrers that are
                not from the local site.  This makes extensive use of functions
                described in #2, and serves as a very good testcase for them.
  4. 11/12/00 - In order to use new functionality, filters must be specified in
                list form now.  Crappy to *BREAK BACKWARDS COMPATIBILITY*, but 
                *much* better in the long run!
  5. 11/17/00 - New Truncate AccessFilter.
  6. 11/19/00 - Renamed UnescapeURL plugin to just "Unescape".

Version 2.0pr12:                                                       11/05/00
  1. 11/03/00 - Added ALT tags to the breakout plugin so that Lynx likes
                MagicStats again.
  2. 11/04/00 - Added Referrer info to the Details page of the Fancy theme.
  3. 11/04/00 - Fixed case bug in field selection.  This could have caused 
                filters to not match right.
  4. 11/04/00 - Generalized host and page count plugins to be able to count
                any type of information.  Now known as the "Count" plugin.
  5. 11/05/00 - Skel files can now use list expressions ( [xxx,xxx] )
  6. 11/05/00 - Added a table of the most common referrers to the Fancy theme.


Version 2.0pr11:                                                       11/03/00
  1. 11/02/00 - Added logic to AFUnescapeURL filter to merge //'s.
  2. 11/02/00 - Allow data tables to contain links based on the contents of 
                a row.  Used in Fancy Theme to link hosts to details page.
  3. 11/02/00 - Fixed very minor bugs in Fancy theme.
  4. 11/02/00 - Can now treat "magic" MSInsert variables as $(Variables).  For
                example, to get the page date, use $(MS.Date:Format=Long).
  5. 11/03/00 - Documentation from the web site is now included in the source
                and install distribution.

Version 2.0pr10:                                                       10/22/00
  1. 10/22/00 - Fixed bug reading MSDOS style logs in unix.
  2. 10/22/00 - Fixed unix filename expansion problem with logs (~ expansion)
  3. 10/22/00 - Removed some gross string debug stuff (only enabled in _g 
                builds anyways.)
  4. 10/22/00 - Fixed bug preventing serialization of AccessFormatPlugins.
  5. 10/22/00 - New IIS4.0 compatible AccessFormat plugin...

Version 2.0pr9:                                                        10/16/00
  1. 10/16/00 - Many portability fixes.  Now compiles "out of the box" on 
                Win32 platforms with Visual C++ 6.0.
  2. 10/16/00 - New Installation Guide.  Describes Unix/Win32 install steps.
  3. 10/16/00 - Graph plugin added to build tree (in /StatsGraph)

Version 2.0pr8:                                                        10/10/00
  1. 10/09/00 - Fixed minor bugs in StatsGraph graph applet
  2. 10/09/00 - Fixed bugs in themes that were referring to Graph.java.ImgUrl
                instead of Graph.Java.ImageURL
  3. 10/10/00 - Fixed SEGV when referencing an undefined variable
  4. 10/10/00 - Moved initialization of MSOptions::GetBuiltInPluginResURL(),
                earlier (right when it is first known).
  5. 10/10/00 - Added a new theme accessable variable $(MS.BuiltInURL)

Version 2.0pr7:                                                        09/24/00
  1. 08/30/00 - Made a rudimentary web page for MS2.0
  2. 09/24/00 - Fixed bugs in PageBreakout and DetailBreakout plugins to get
                rid of extraneous http:/ & http:// breakouts...
  3. 09/24/00 - Export regular expression matching functionality to plugins.
  4. 09/24/00 - Add ability to get regex match span
  5. 09/24/00 - New plugin! Rewrite plugin to allow access modification by 
                by arbitrary regex's

Version 2.0pr6:                                                        09/16/00
  1. 08/30/00 - Fixed ElapsedSeconds bug to make it accurately report time.
  2. 08/30/00 - Updated a lot of documentation...
  3. 08/30/00 - Implemented cached skel files.  Sped up performance a lot on
                runs that produced stats for many days... doesn't just leak 
                skel mem now (it still isn't free'd, but at least it's reused).
  4. 08/31/00 - Strings are shared (performance win!)
//, including their hash values
  5. 09/01/00 - Added Browser and Referrer support.  Made AfCommonLog plugin
                able to parse extra fields appended to the end of the CLF 
                records.
  6. 09/01/00 - Added a SIGINT handler to allow clean interruption of M.S.
  7. 09/01/00 - Added MSInsert=MSCopyright to assist with theme maintenance.
  8. 09/01/00 - Chasing through SkelFiles with interation instead of recursion.
  9. 09/03/00 - Abstracted tree generation code out of PPPathBreakout plugin
                into a "BreakoutRenderer" API.
 10. 09/04/00 - Added serialization methods for DataPair's, Table's, Arrays,
                and LinkedList's.  Created SerializeEx.h header file.
 11. 09/04/00 - Created the DetailedBreakout plugin, and the Fancy Theme.
 12. 09/05/00 - Changed Copyright Flags back to me as Cherokee died.

Version 2.0pr5:							       01/27/00
  1. Totally restructured build structure to use recursive makes and seperate
     install mechanisms.
  2. Themes and Documentation is now part of the build structure.
  3. Converted some documentation to SDF format.
  4. Started prototyping configuration applet.
  5. Plugins now have full dependancy information.
  6. Fixed Seek bug in FSGZipped plugin.
  7. Added comma operator to ConfigFile parser so that lists can be created.
     This changed a lot of code, because now variables are bound to 
     expressions, which may be a string, or may be a list of subexpressions.
  8. AccessLogPlugins have been removed, now they are handled by the AccessLog 
     class in a uniform way. Domain names may now be associated with access 
     logs.
  9. Multiple (unrelated) access logs may be read from at the same time.
 10. New Domainify plugin created: Plugins/AFDomainify

Version 2.0pr4:                                                        05/11/99
  1. Changed Skel File processing to use flex and bison.  Much more efficient,
     also allows the use of more complex expressions in MSInsert and MSPlugin 
     tags, as well as the new MSIF tags.
  2. Changed the Config Files to use flex and bison.  Same bennies as above.
  3. Changed MagicStats.cpp to use MagicStats Engine plugins... interesting, 
     the possibilites suddenly become limitless.
  4. Dramatically restructured config file flow to reflect #1 & #2 above, many
     fewer special cases.  Fixed DateEnum plugin.
  5. Made MSFilename be an immutable class that no longer derives from String.
     Benefits: Efficiency, reduction of confusion, can now merge //'s into a 
     single / under unix without a big performance hit.
  6. Added the -lint option.  It seems to work.

Version 2.0pr3:                                                        02/12/99
  1. Reworked Plugin API so that plugins may be created with meta data, not 
     just a filename.  This enabled a reworking of the FileStreamPlugin's.
     Stuff makes more sense now.
  2. Optimized some string routines... much faster now...
  3. Changed API to use MSAPI declarations... which under windows, causes them
     to be marked as __declspec(dllimport) or __declspec(dllexport) in a plugin
     or in the main MagicStats tree, respectively.  This allows plugins to be
     built under windows...
  4. Changed copyright flags to say copyright Cherokee Communications, Inc.
  5. Changed all copyright messages in source files to Cherokee
  6. Added a few new plugins.

Version 2.0pr2a,b:                                                     12/02/98
  1. Added the FileStream abstraction, in anticipation of supporting compressed
     log files and writing a compressed MagicStats.dat file.
  2. Added FileStreamPlugin capabilities...
  3. Added FSNormal and related classes for dealing with normal uncompressed &
     unencrypted files.
  4. Now uses PCRE for RegEx's instead of code by Henry Spencer.  
  5. Changed the MSLoadContext class so that it finds all available themes, 
     also ended up renaming it to ThemeManager.
  6. Added -T commandline option for listing all available themes.
  7. Combined Directory scanning functions for plugins and themes to make 
     porting layer (platform specific layer) smaller.
  8. Increased performance of String class by not allocating space for empty 
     string.
  9. Fix wierdness in string class that allowed "SetLength" to be called...
 10. Made MSOptions class completely static.  All member variables are now 
     static, which makes passing and maintaining pointers to an MSOptions 
     variable useless and dumb (sped it up too).

Version 2.0pr2:                                                        10/23/98
  1. Fixed crash that occured when MagicStats.cfg file was not found.  
  2. Fixed some unused code to be correct.
  3. Fixed a portability problem that was because of an endian dependancy.
  4. Fixed problem that caused web pages to be skipped when a server didn't
     get any hits on a certain day.
  5. Generalized Plugin model so all plugins are serialized to disk.
  6. Added -P option to print out the available plugins.
  7. Modified PageCountPlugin to actually link to the pages...
  8. Added LinkedList Iterators for navigating linked lists.
  9. Implemented the new filtering mechanism, incorporating regexps...
 10. Created the PlatformAbstraction class for putting platform dependant stuff
     into.  This is a better solution than UnixStuff.(h|cpp) was...
 11. Modularized Access class so that it may be virtualized... and implemented
     AccessFormatPlugins.
 12. Added dynamic loading of plugins in Unix target!!!
 13. Changed to a templated Plugin model for more terse plugin descriptions.
     This change also removed the need to have PluginTables and redundant 
     information (which could lead to inconsistencies)
 14. Compiled on Solaris for OHSU release.

Version 2.0a13:                                                         6/27/98
  1. Implemented AccessFilters!
  2. Reduced compile time dependancies by forward declaring some classes rather
     than #including everything...
  3. Fixed the kludge to share code between the OutputManager and PluginManager 
     classes.  Created new HTMLManager class.
  4. Consolidated all wierd ways to _create_ plugins into the 
     Plugin::CreatePlugin static method.
  5. Cleaned up the plugin interface some so that things are more consistant,
     and so that the Plugin constructor actually does useful initialization...
  6. Changed the main() manager initialization scheme to be more sane... and so
     the Managers use references to Options rather than pointers.

Version 2.0a12:                                                         6/14/98
  1. Changed the Table class to use a HashTable back end instead of a binary
     search tree.  This eliminated the problem that I encountered with linear
     time search performance (Keys were being serialized in a sorted order and
     later inserted into a tree in that sorted order).
  2. Added the display of debugging information to serialization and 
     deserialization of plugins routine in PluginManager.
  3. Fixed division by zero bug in DailySummaryPlugin plugin...
  4. Added a FilterURL method in the Access class as a temporary measure to
     remove index.html, index.shtml, and index.htm postfixes.
  5. Changed Plugins to all keep track of the version numbers that they were
     using.
  6. Updated Dejavu theme to have some more modern features...

Version 2.0a11:                                                         5/28/98
  1. Fixed the SummaryPlugin so that it works for all update frequencies.
  2. Modified Plugin loading structure to use a unified model for all plugin 
     types.  Also made preloading of Page Plugins unneccesary.  Remove 
     PluginNode class.
  3. Modified plugins to use a reference to the Options class instead of a 
     pointer.

Version 2.0a10:                                                         5/21/98
  1. Fixed bug in access class that cause spurious resets of the data.  Parsing
     of the access was failing on multiword authentication strings.  This 
     caused the year to be reported wrong, reseting all of the data.
  2. Change the String::Tokenize function to behave slightly different.
  3. Fixed some bugs resulting in the change to Tokenize... the code actually
     makes more sense now, imagine that.
  4. #ifdef'd the #pragma once directives to make gcc stop whining...
  5. Modified the MSLoadContext class to support passing URLs into the page 
     templates...
  6. Implemented the $ThemeBase variable for Themes to know where to get their
     shared resources.
  7. Transfered some stuff from paper notes into TODO list...
  8. Added Themes to SourceSafe.

Version 2.0a9:                                                           5/9/98
  1. Serialize class added for serializing and deserializing data.  It is 
     extensible enough to allow arbitrary data types to be added.
  2. Changed PluginManager class and Plugins to serialize this way instead of
     directly to a file.
  3. Chanded the serialization class to treat all signed integer types the 
     same and all unsigned integer types the same.  This allowed compression
     of data, resulting in significant savings in data file.
  4. Made the FilterManager and AccessLogManager classes static so that 
     strange don't need to be passed around any more.  This removes some
     ugliness from the main function as well...
  5. Made PluginManager serialize the current AccessLog object, instead of
     the hardcoded position in the access log file.
  6. Improved ALMonolithic class to support versioning when serialized for
     the future.

Version 2.0a8:                                                           5/3/98
  1. Reworked Table class. Now the [] operator can be used on the left side
     of the equation successfully.  Ex:  T[Key] = NewValue;
  2. Modified ConfigFileSection Class to return references to table objects
     instead of pointers to them.
  3. Switched HostCountPlugin to use Table instead of LinkedList for efficiency.
  4. Enabled pluggable AccessLog objects for different format AccessLogs

Version 2.0a7:
  1. Completely changed Object hierarchy.  Removed String Compare as a required
     function for Objects to implement.  
  2. Fixed memory leaks in String class.
  3. Implemented Table class.
  4. Added Tree classes and stack class.

Version 2.0pr1 (Preview Release 1):                                     2/25/98
  1. Created makefile for unix.
  2. Fixed problems compiling on GCC.
  3. Renamed many classes.
  4. Added MSFilename class to dereference tildes automatically on Unix.
  5. Segregated platform specific code more logically into files.
  6. Renamed classes for consistant capitalization
  7. Enabled automatic registration of plugins, using INIT_PLUGIN macro

Version 2.0a6:
  1. Added FilterManager class
  2. Made Filter class cache recent results...  Improved performance a bunch.
  3. Update MagicStats.h file to take care of platform dependents stuff
  4. Made a cool makefile for unix.

Version 2.0a5:                                                          1/26/98
  1. Fixed filter problem accepting *.gif or *. anything...
  2. Switched LinkedList sorting algorithm to mergesort rather than bubblesort
  3. Created DataTable and DataGraph classes to ease interfacing with the graph
     Java applet.  This simplifies all of the plugins and makes their 
     OutputHTML function much simpler and cleaner.
  4. Added LinkedListPtr class.

Version 2.0a4:                                                          1/12/98
  1. Improved comments.
  2. Implemented Server Configuration File loading.
  3. Added to the TODO list.

Version 2.0a3:                                                          1/11/98
  1. Cleaned up Plugin API to use more descriptive names.
  2. Fixed String class so that it was able to be used in a collection.
  3. Fixed date class so that it can be used in a collection.  Required adding
     a constructor for making dates from Strings, and adding Compare function
     for use with Strings.

Version 2.0a2:                                                         12/19/97
  1. Switched over to a template based linked list setup instead of one based
     on inheritance.  This removes the need to constantly do typecasting of 
     variables and other bad things.
  2. Added version numbering note.
  3. Created TODO list.

