Changes
=======

Vr. 1.25.2 (2006-05-14)

- New: Added item "Find Selected Task In Logfiles" in context menu of pages
       "Log" and "Log (E.+W.)". It opens "Find In Logfiles" window and adjusts
       task number and date range to find the logfile lines of the currently
       selected task.

       This function will also be used now if you double-click a line and no
       lines for the selected task are found in the current logfile.

       Note: Date selection only works if you don't rotate logs manually.

       Note: These functions are intended to be used on "Log (E.+W.)" page,
             especially after a "Show Error History".

- New: Added script functions "HamWebHtmlLoad" and "HamWebHtmlToText" to load
       HTML pages and convert them to text.

          var( $html, $text )
          $html = HamWebHtmlLoad( "http://www.elbiah.de/news.htm" )
          $text = HamWebHtmlToText( $html )
          print( $text )

- Chg: When sending mails, small messages are sent before larger ones now.

- Chg: Optimized sending mails to remote servers and loading mails from Hamster.

- Fix: Mail delivery errors were always sent to "admin" account, local sender
       addresses were not recognized.

- Fix: Added "8BITMIME" to SMTP server's EHLO reply.

- Fix: Wrong syntax check for "notifyoff" in MailFilt.hst fixed.


Vr. 1.25.1 (2006-01-29)

- New: Error and other notification mails can now be redirected to a different
       account (HControl -> Hamster Settings -> Local Mail).

- New: Added "notifyoff" for MailFilt.hst.

- Chg: Stopping mail and news transfer tasks as well as RSS reader tasks could
       take a long time. Such tasks should stop quite immediately now instead
       of waiting for any timeouts.

- Chg: "HamWebReader" script command now follows redirects in mode 3.

- Chg: Some modifications on "Tasks" page to improve readability.

- Chg: Avoid concurrent fetching of mails from remote POP3 servers, i. e.
       additional fetch requests are ignored until the already running task
       for a server has finished.

- Fix: Script start in editor window did not support meta-parameters yet.

- Fix: Regular expression was not accessible at "Find In Logfiles" and
       From/To labels were not updated. Furthermore, regular expressions
       only returned one matching line.

- Fix: Some HControl dialogs could appear off screen on multi monitor systems.


Vr. 1.25 (2005-10-15)

- New: Added menu item "Find In Logfiles" in context menu of logfile list.
       It opens a dialog to request all logfile lines from HService that match
       a given text or regular expression within a given date range.

- New: Added menu item "Show Error History" in context menu of logfile list.
       It shows the last 100 errors and warnings that occured, regardless if
       HControl was connected or HService was restarted. These log lines are
       stored in a new logfile named "errors.log".

- New: Added a new script named "Demo-Send-Errors-By-Mail.hsc" to send a mail
       with newly logged errors and warnings that can frequently be run by the
       scheduler. See comments in script for details.

- New: Added a menu item and a toolbar button to save and run the script in
       HControl's script editor window.

- New: Added a menu item to change font of built-in script/file editor.

- New: Added new mode 3 to HamWebReader script command (RSS) that works like
       mode 1 (one article per message) but additionally loads the linked HTML
       page and appends it to the article. This new mode 3 can also be used to
       load a HTML file and attach it to the article "as is".

- Chg: HService does not start a new logfile on startup anymore if the old
       "0.log" contains entries for the same day. This results in daily
       logfiles (0.log=today, 1.log=yesterday etc.) unless you rotate logfiles
       manually by HControl, script or RC server commands.

- Chg: Added "UID=..." to "X-Hamster-Info:" header in news and mails which
       gives the unique identifier of the task that created the message.
       Related lines in the log files are marked with this UID ("{...}").

- Chg: Added "Delivered-To:" to the list of headers that is used to detect
       recipients of a mail.

- Fix: Fixed a bug that sometimes caused auto-distribution to assign unkown
       mail addresses to account "admin", especially with "Received:" lines
       containing both sender and recipient information.

- Fix: Fixed an access violation when SSL is used together with SOCKS.

- Fix: HService could not be started as a system service under a limited user
       account (a Administrator privilege was used instead of a sufficient
       readonly one when connecting to service control manager).

- Fix: Fixed some display issues in HControl when using high DPI fonts.

- Fix: Fixed some minor bugs in HControl's built-in script/file editor (text
       is pasted without any formatting now; scrolling to top after load).

- Fix: Fixed some wrong error codes with NNTP feed commands.


Vr. 1.24.1 (2005-07-18)

- New: New dialog in HControl to control HService service (File -> Service).

- New: RSS feeds with "https" URLs like "https://addons.mozilla.org:443/rss/"
       should work now.

- Fix: Some special RSS encodings fixed (MS URLs).

- Fix: Timeout behaviour of RSS reader fixed.

- Fix: Reject some more invalid characters in new newsgroup names.

- Fix: Invalid response for STAT command fixed (NNTP server).

- Fix: Some history related problems with newsgroup names containing uppercase
       letters were fixed. Fix will only work for articles loaded with this
       fixed version, old articles can be fixed by rebuilding news history.

- Fix: Possible deadlock of user task command "WAIT-ALL" fixed.

- Fix: Clients reported QUIT reply instead of real login error message.


Vr. 1.24 (2005-05-08)

- New: Two new options in file IPAccess.hst to open the servers for a more
       limited group of IPs instead of having to open them for all IPs:

       - If a domain name instead of an IP is given, access is assigned if
         the domain name of the connecting IP equals the given name or is
         one of its sub-domains:

         ALL,  NA, well-known-bad-guys.example
         POP3, RO, mycompany.com.example

       - If a domain name is given with a leading question mark, access is
         assigned if the connecting IP equals the (current) IP of the given
         name:

         NNTP, RW, ?friend.dyndns.org.example

       Note: IP and domain name lookups are not cached by Hamster in both
             cases. Lookups happen when someone is actually connecting.

       Note: Be sure to place such "lookup" lines below your local definitions,
             so that your own, local connects will not establish an unwanted
             internet connection if used in an auto-dialup/router environment.

- New: NNTP server's default auto-login account ("nntpdefault") can now be
       overridden in file IPAccess.hst by 5th value. Like "nntpdefault", such
       accounts require the password "*" for auto-login to work:

       NNTP, RW, mycompany.com.example, , mycompany

- New: Login of accounts can now be limited to specific IPs or domains. If a
       connecting client does not match a given restriction, login is rejected
       and an appropriate warning is shown in the log.

- New: NNTP server now supports feed commands IHAVE, CHECK and TAKETHIS if
       account option "User may use feed commands" is enabled. Related
       changes are:

       - New 'NewsInLocal' action parameter value 6 for "IHAVE/TAKETHIS".

       - New group option "Group is feeded, don't propagate POST" to prevent
         new postings from being stored in "News.Out" and get POSTed.

       - New script command "HamNewsJobsFeed" to feed other servers.

       See also: New "How to ... feed newsgroups" in help file.

- New: NNTP server will now reject messages if it detects dependency errors in
       configuration (e. g. "generate Message-ID" without "FQDN") and will
       issue an appropriate warning. Former versions just ignored dependent
       options in such cases.

- New: News score file can now be used to reject messages posted or feeded to
       Hamster's NNTP server. Such score rules are not newsgroup based but use
       the fictitious groups "$POST$" and "$FEED$" instead.

- Chg: Added a warning if NNTP server's experimental, undocumented and rather
       useless XH-commands are used and removed the related permission flag
       from Accounts window. Commands are still functional but will be removed
       soon.

- Chg: Additional parameter for "MailOut" and "MailOutFile" actions that will
       contain the authenticated account name of sender (only set if SMTP-AUTH
       is required/used).

- Chg: Source code changes:

       - Updated to most recent Indy 9.0 ("Current Development Snapshot"), see
         "indy-readme.txt" in folder "indy9" for more details. Required and
         recommended patch sources are also included in this folder now.

         Note: It looks like this update has also improved the situation when
               POSTing to SSL newsservers where connection occasionally gets
               no reply and runs into a timeout. At least I was able to "flood"
               M*rc*s' server with 10 messages, though 11th still timed out.

         Note: I also tried updating to Indy 10.0 but gave up an hour later.
               As feared, too many interface changes in basic functions, esp.
               in thread/connection handling.

- Fix: NNTP's "Search unknown Message-IDs" option could run into an timeout
       with invalid Message-IDs.

- Fix: Some SMTP server replies did not contain server's domain name as first
       parameter behind status code (init, HELO, EHLO, QUIT).

- Fix: SMTP server did not check if MAIL FROM has already been sent before
       accepting mail.

- Fix: Script filenames containing spaces did not work.


Vr. 1.23 (2005-04-24)

- Chg: Some optimizations for installations with hundreds of (mail) accounts:

       - Avoid multiple reloading of full account list in HControl's "Accounts"
         dialog. {MH}

       - Avoid multiple and/or unneeded reloading of all settings of all
         accounts on changes in HService. {MH/JH}

       - Fast lookup of known mail addresses in HService. {MH/JH}

       - Minimized memory usage while creating reports.

- Chg: Made some more configuration dialogs sizeable.

- Chg: Mails to reserved top level domains of RFC-2606 (test, example, invalid
       and localhost) are now all kept local und will not be sent out. Incoming
       mails for such recipients will be sent to "admin" unless any account has
       assigned such a mail address.

       Note: No new behaviour, but only domains ending in (exactly) ".invalid"
             were recognized to be treated this way in previous versions.

- Chg: Source code changes:

       - now compiles with (Personal) Delphi 7 without errors/warnings
       - workaround for bug of Delphi 7 with ComboBox.Add('') {MH/JH}
       - cleaned up mail retrieving process in TClientPOP3

- New: Added two new options for "leave mails on server" mode
       (HControl -> Config. -> Hamster Settings -> Remote Mail):

       - "Recognize and ignore already filtered mails"

         If this option is enabled, all mails with a filter result of "ignore"
         or "delete" will be ignored like loaded mails, i. e. the filters are
         only checked once for this mail and then never again.

       - "Delete mails with a filter result of 'delete' nevertheless"

         If this option is enabled, a "delete" filter result will be executed
         although "leave mails on server, don't delete" is activated.

- Fix: Script command "HamArtDeleteMid" did not delete all occurances of a
       crossposted article.

- Chg: Added some more event log entries in case of errors on application or
       service level as the default logfile might not be accessible any more
       in such situations (NT platforms only).

- Fix: When using "User Tasks" for news transfer it could occasionally happen
       that a message was posted to multiple news servers. The modifications
       made also fix the problem that the "preferred post server" setting did
       not work very well with "User Tasks".

- Fix: With an unusual sequence of script commands (both "Hamster Scripts" and
       "User Tasks") it could - very rarely - happen that a POST news job was
       assigned to multiple newsservers. To avoid this, every assigned POST
       news job is now blocked for some time before it can be assigned again.

       Just to clarify: Don't worry, normal POST jobs are not affected or
       delayed in any way by this change. It just blocks additional attempts
       to post the same message again for about one minute.

  // Marked changes provided by: {MH} Michael Hanel
  //                             {.../JH} with major modifications by me


Vr. 1.22.3 (2005-04-10)

- Chg: Added missing horizontal scrollbar on "Tasks" and "Clients" page and
       removed the display of the (useless) thread IDs on these pages.

- Fix: If both patterns in script command "HamSendMail[Auth]" are given, both
       will have to match the mail to be sent.

- New: Added action "MailToNews" that gets triggered whenever a new article is
       redirected from mail to news. Parameters are the same as with "NewsIn".

- Fix: Cancel of local news message could fail if "From:" lines of original
       and cancel message were not identical. Only the mail address is checked
       now.

- Fix: Servers just stopped with an error when receiving messages containing
       lines longer than 16 KB (regardles of configured line length limit).

- Fix: Servers line length and text size limits could not be disabled with a
       setting of 0. Furthermore, internal line length limit was always 4096.

- Fix: A group that was "never read by a client" was not recognized when
       checking it for auto-unsubscribe.

- Chg: Prevent groups and pulls from automatically being unsubscribed if group
       settings could not be read for any reason.

- Chg: If highest article number of a group's data.ini and data.idx gets out of
       sync (power loss, system fault, XP recovery), the highest number is used
       for new articles now, so newsreaders continue to load new articles.

- New: Font for logfile display can be now changed at HControl->File->Settings.

- Fix: News server rejected posting if "From:" did not contain a dot in domain
       part of mail address (e. g. "nomail@invalid").

- Fix: Group names containing upper case letters could lead to a "sharing
       violation" if used with lower case letters.

- Fix: Groups that once were pulled but became local by deleting their pulls
       were not reported with NNTP server's LIST command.
       

Vr. 1.22.2 (2005-02-19)

- Fix: Clients just stopped with an error when receiving messages containing
       lines longer than 16 KB (e. g. malformed spam).

- Fix: The "not" option in Mail Traps did not work when used with fictitious
       headers like "(any recipient)" that actually represent multiple header
       and/or body lines.

       Please note: In such a case, only the first of the "not" matching lines
       is reported as an example (but all lines were actually tested).

- New: Scripts:

       - Parameter variables of "sub" functions can now be declared "optional"
         by appending a question mark to their name:

            sub test( $mandatory, $optional? )
               if( !IsVarSet( $optional ) )
                  $optional = 42  # not given, use default value
               endif
               # ...
            endsub

       - New functions "IsVar" and "IsVarSet" to check, if a variable does
         exist and/or has a valid value assigned.

       - Enhanced HClassic.hsm module that makes use of the new functions to
         also support variants of Classic commands with optional parameters.


Vr. 1.22.1 (2004-12-24)

- Fix: First Mail Trap in HControl was shown with wrong values.

- Chg: Mail addresses in "Received:" headers are only taken into account for
       internal mail distribution if they are preceded by word "for". Affects
       auto-distribution and AddAccounts-rules in MailFilt.hst.

- Fix: When adding "Return-Path" header (SMTP), an already existing one was not
       removed and the mail address may have been replaced by mailbox name.

- Fix: Cloning an account led to an orphaned "newuser<number>" path.

- Fix: Labels of items on the "Script" page were not read-only.

- Fix: If SMTP server rejected a mail (e. g. Mail Traps), it did not send out
       error message.

- Fix: Modifying or invalidating a mail in "MailIn/File" action did also
       affect any additional recipients. Action is now called with original
       mail text for every user.

- Chg: Script functions "UpperCase" and "LowerCase" now make use of Windows'
       default language/codepage.


Vr. 1.22 (2004-10-23)

- New: Added actions "MailInHeader" and "MailInHeaderFile" that are called
       right after the headers of a new mail are available (fetched by POP3
       or received by SMTP).

- Chg: If configured, the SMTP server now adds the "Received:" header line
       before the message is checked by the new "MailInHeader" actions or
       by "Mail Traps".

- New: Added new script commands "HamDnsLookupHostAddr" (lookup host address),
       "HamDnsLookupHostAddrList" (lookup list of host addresses) and
       "HamDnsCachePurge" (purge internal lookup cache and flush it to disk).

- New: Added action script "Demo-RBL-Check.hsc" and accompanying module
       "RblChecker.hsm" to lookup mail senders in real-time block lists (RBL)
       and to add appropriate "X-RBL-Warning:" headers for the listed ones.

       See "How to ... filter spam mail with real-time block lists (RBL)?" in
       help file and the documentation contained in script for details.

- Chg: HControl:
       - Replaced some "Cancel" buttons by more appropriate "Close".
       - Shortcut for File/Disconnect changed to F9.
       - Quick hack: If comment of a "Mail Trap" contains an underscore
         character ("_"), a separator line is drawn above it.

- Fix: The "MAIL FROM" envelope header (SMTP) may have been replaced by user's
       mailbox name.


Vr. 1.21.3 (2004-10-13)

- Fix: Fixed the fix of 1.21.1 where some rare RSS feeds still had a date in
       the title line and were posted over and over again.

       Note: This fix will cause a one-time repost of affected feeds.

- Fix: Some rare errors when loading RSS feeds were reported wrong.


Vr. 1.21.2 (2004-10-08)

- Fix: RSS dates of format "4/20/2004 11:21:23 AM" did not work yet.

- Fix: Original MAIL FROM of SMTP mail may have been changed if given address
       was a known local address.

- Fix: Authorization with script command "HamWebUseProxy" did not work.


Vr. 1.21.1 (2004-10-03)

- Fix/Chg: Removed date from title line in posted RSS/ATOM message body to
       prevent unchanged messages from being posted over and over again with
       some feeds. "Date:" header of posted message will still contain the
       original date IF given in and recognizable from feed's data.

       Note: This change will cause a one-time repost of otherwise unchanged
             feeds. This will happen the next time the feed changes, so it
             might take "weeks" for rarely changed feeds.

- Chg: Suppress DNS query warnings after at least one valid MX was found
       ("debug" level instead of "warning" level).


Vr. 1.21 (2004-10-01)

- New: Added two "ready to run" demo scripts to load some RSS example feeds
       of categories world news, science and security from various sources
       (Yahoo, BBC, New York Times, US-CERT, Microsoft).

- New: Added a new "How to load RSS and ATOM feeds?" in helpfile giving some
       basic information on this topic. Also available online:

       http://www.elbiah.de/hamster/doc/howto/load-rss-feeds.htm

- Chg: Some changes related with the handling of RSS and ATOM feeds:

       - Assume character set "UTF-8" unless declared differently by feed.

       - Headers and body of posted messages are "UTF-8" encoded now if they
         contain any non ASCII characters.

       - Additional statements for author and date in feeds are taken into
         account now.

       - Replaced posted error message by a "Warning" in logfile.

       - If feed contains readable date details, the given date is used for
         the "Date:" header of generated messages.

       Note: Changes may cause a one-time repost of otherwise unchanged feeds.

- New: Added an additional parameter for the "HamWebReader" script command
       to modify the "From:" header of posted messages.

- New: Added an additional parameter for the "HamWebReader" script command
       to save the raw feed files in subdirectory "rss" of logfile directory.

- New: Added the new script command "HamWebUseProxy" to define any required
       HTTP proxy settings in subsequent calls of "HamWebReader".

- Fix: Wrong date format was used when creating RSS 2.0 feed from a newsgroup
       (script RssFeedGenerator.hsc).

- Fix: User Task command "WAIT-ALL" did not wait for other tasks if own
       tasks have already been finished.

- Fix: When checking for local mail addresses, comparison was still case
       sensitive (former fix in 1.15 did not work).

- New: Newsgroup lists are rebuild automatically now after new groups were
       reported by a server or the group lists were reloaded. It happens as
       soon as no other tasks are running any more.


Vr. 1.20 (2004-09-25)

- New: To load password protected RSS and ATOM feeds, you can use URL format
       "http://USERNAME:PASSWORD@www.example.com/feed.xml".

       To use one of Hamster's script passwords instead, use URL format
       "http://$42@www.example.com/feed.xml" (with 42 replaced by the
       appropriate password number).

       Technical note: Only HTTP's "Basic" authentication is supported.

- Fix: If a RSS/ATOM feed could not be loaded, an error could happen while
       trying to report the real error ("Error reading/processing feed:
       Zugriffsverletzung ...").

- Fix: Improved handling of non ASCII characters in RSS/ATOM feeds.

       Note: This fix may cause a one-time repost of otherwise unchanged feeds.

- Fix: Loading of plain HTML files by "HamWebReader" script command did not
       work any more since vr. 1.19 ("unknown root element 'html'").

- Fix: NNTP server's "LIST ACTIVE" command did not work with patterns (effect:
       missing number of new articles in newsreader "gnus").

- Chg: Added a "Detail" level logfile entry for MailTrap and MailFilt results
       when fetching mails (just to make sure that there's always an logfile
       entry as at least "leave on server" mails partly did not have one).


Vr. 1.19 (2004-09-19)

- New: Added an additional parameter for the "HamWebReader" script command
       that describes how to handle feeds:

          0: Post all items in one article (if any item has changed).
          1: Post one item per article (only new or modified ones).
          2: Post all modified items in one article (default).

       Vr. 1.18 worked like with 0, but the new default is 2, which seems to
       be the most convenient mode for many types of feeds.

- New: "HamWebReader" script command now uses HTTP's "If-Modified-Since" to
       detect unchanged feeds without having to load them.

       Source code only:
          Requires a bug-fixed version of Indy's IdHTTP.pas to compile
          (see '[HPG]' markers in file 'IdHTTP.pas.hpg' of sources).

- Fix: Some RSS and ATOM feeds didn't show any texts and some did show all
       texts, but as the description of the channel.

- New: Added a new script command "GlobalOnce" that simplifies tasks of type
       "only do this once per given period". See examples at "GlobalOnce"
       and "HamWebReader" in help file.

- New: Script commands "FileDelete" and "FileCopy" where enhanced to also
       support wildcards ("*", "?"). If used with wildcards, the destination
       has to be a valid directory and must not contain any wildcards.

- New: Added a new script command "FileMove" that copies files to a new
       destination and deletes the source files after they have been copied
       successfully.

- New: Added a new "ReportsCreated" action that gets triggered after reports
       were updated. It can e. g. be used to copy fresh reports to a webserver.

- New: Added an index file for all available reports ("Hamster-index.htm"),
       so you have a fix link when copying all reports to a webserver.

- Fix: Report list was not sorted by date in HControl.

- New: Added a .manifest file that enables XP styles for HControl.

- Fix: Error when decoding a header value with encoded empty data. {TGL}


Vr. 1.18 (2004-09-14)

- New: Added the new script command "HamWebReader" to load RSS/XML feeds
       (version 0.91, 1.0 and 2.0) and Atom/Blog feeds (version 0.3) into
       a newsgroup.

       The script command loads the feed from the internet and converts it
       to plain text. If the text has changed since it was loaded the last
       time, it is stored in a newsgroup.

       All files that are not recognized as one of the mentioned formats
       are treated as being normal HTML files. The text generated out of
       such files may be readable, but in most cases isn't ...

       Examples:

       # News on www.elbiah.de (RSS 2.0):
       HamWebReader( "http://www.elbiah.de/news.xml" )

       # Google's message summary of hamster.en.misc (Atom 0.3):
       # Note: Link might change as this is only a beta test of Google.
       HamWebReader( "http://groups-beta.google.com/group/hamster.en.misc/feed/msgs.xml" )

- New: Added a new script named "RssFeedGenerator.hsc" to create a RSS 2.0
       feed file from the messages of a newsgroup. See inline documentation
       for details.

       
Vr. 1.17 (2004-09-12)

- Chg: Added some additional checks when processing mails, especially for
       situations with logical loops related with mail forwarding. Also
       added and modified some Debug log entries in this area.

- Fix: Some HControl dialog windows could not be closed by OK button before
       an item was selected.

- Chg: Subject of kill/ignore/notify-mails caused by MailFilt.hst changed
       to MailTrap style ([MailFilt KILL] "Subject:" from "From:").

- Chg: "Mail Lists" were renamed to "Distribution Lists".


Vr. 1.16 (2004-06-01)

- New: The new '#!meta <keyword> <parameter>" preprocessor command is used
       to store additional information about the script within the script.

       HControl makes use of the following meta keywords to detect and ask for
       required parameters automatically: ParamTitle (title of parameter
       window), ParamCount (number of required parameters), ParamPrompt (prompt
       text), ParamDefault (the initial value), e. g.:

       #!meta ParamTitle "The meaning of life"
       #!meta ParamCount 1
       #!meta ParamPrompt 1 "Your answer:"
       #!meta ParamDefault 1 "42"

       The new script "Delete-Article-By-Message-ID.hsc" contains a working
       example to delete articles in Hamster's database.

- Fix: Tried to fix a (non reproducable) "stack overflow" error when retrieving
       mails. Additionally some Debug log entries were added in this area in
       case it happens again.

- New: The global inactivity timeout can now be overridden per server.
       (HControl -> Config. -> Hamster Settings -> Local Details)

- New: New SMTP server option to reject mails that would not pass "Mail Traps".
       Offending mails are rejected with "554 ... Mail violates server policy".
       (HControl -> Config. -> Hamster Settings -> Local Mail)

       Note: Unlike when fetching mails, it is intended that no content of the
             rejected mails are logged in this case but only matching rules
             (i. e. backup and spam report settings do not work in this case).

- New: New action "NewsInLocal" that gets triggered whenever a new message is
       posted to local NNTP server. A parameter describes what will happen if
       the message is not invalidated within the action.

- New: HControl's "Tasks" page now shows more details on transfer threads for
       long running tasks (send/receive large mails, pull many news).

- Fix: When deleting a newsserver, its pulls were not deleted.

- Chg: Changed defaults of user "admin" to enable automatic subscription of
       newsgroups. Should only affect new installations where the default
       "admin" account is automatically created for the first time.

       Note: I have planned to enable other "auto pilots" like this by default
       in one of the next versions, presumably even somewhat "harmful" ones
       like "auto unsubscribe" and  "auto purge" (the related default periods
       will also be raised significantly in such cases). Like above setting,
       these changes should not affect already existing installations.


Vr. 1.15 (2004-04-25)

- Chg: Right click in logfile window now selects the line under the cursor for
       context menu items.

- Fix: Catch-all accounts ("*@domain") were case-sensitive.

- Fix: Mails fetched by POP3 from external servers may have been placed in
       "Mail.Out" instead of mailbox, if account name contained an "@" char.

- Chg: Names of new accounts (i. e. only Hamster internal ones) are only
       accepted now, if they consist of letters, digits and characters "." or
       "_". Already existing accounts are not affected by this change, though
       some other characters (esp. "@") may cause mail delivery problems.

- Fix: Files created in Windows' temporary folder (c:\windows\temp or c:\temp)
       were not removed, if a mail with an attachment was tested by Mail Traps.

       Note: This fix only prevents new files from being left, so you might
       want to clean up the temporary folder to get rid of the old ones. The
       filenames caused by this bug have a pattern of "Ind*.tmp".

- Fix: Mails forwarded to external mail addresses were sent out with an invalid
       envelope address (esp. "MAIL FROM", maybe "RCPT TO"), causing some
       servers not to accept it. If no '@domain' is given (internal/forwarded
       mails), the configured FQDN is added by default now.

- Chg: Action "MailIn" got an additional parameter, which gives the username to
       receive the mail.

- Chg: Actions "MailIn" and "MailInFile" got an additional parameter, which
       describes the origin of the incoming mail (0=SMTP, 1=ESMTP, 2=Script,
       3=POP3, 4=Internal, 5=NewsToMail).

- Fix: HService "hangs", if script command "HamNewMail()" was used from within
       an action script. It will still "hang" or fail, if action is configured
       with "[X] Lock" option, that prevents the actions caused by "HamNewMail"
       from being executed.
       Similar problems with other actions were fixed as well, though they may
       suffer from above "[X] Lock" problem, too.

- Chg: Installation defaults for action options "Lock" and "Wait" are both "not
       active" now.

- Chg: Hamster now tries to detect and report possible deadlocks caused by
       nested actions, especially caused by actions with an "[X] Lock" option.


Vr. 1.14 (2004-04-11)

- Fix: Some SSL related bugs (especially TLS negotiation). {JW/JH}

- Fix: Ignore disabled newsservers when adding jobs to list of news jobs (no
       real problem, just gave an irritating number of jobs left).

- New: HControl's error and warning page is now just cleared when selecting
       item 'Clear' in context menu. New item 'Clear and Hide' additionally
       hides the page like before.

- New: Added two new actions named "MailOutFile" and "MailInFile", which are
       in fact just file based versions of "MailOut" and "MailIn", i. e. the
       message is given as a file here and the action scripts can modify or
       even delete these files (e. g. delete file if virus check failed).

       Note: If the new actions are used, each message is temporarily saved as
       "<number>.msg.tmp" then. It gets its "actionable" extension of ".msg"
       after the action has finished its work.

  // Marked changes provided by: {JW} Joern Weber
  //                             {.../JH} with major modifications by me


Vr. 1.13 (2003-12-01)

- Fix: Fetching large mails (> ~5 MB) from Hamster's POP3 server could have
       failed with error "Socket Error # 10055 - No buffer space available.".
       Mail is safe, you just couldn't get it out of Hamster.

- Fix: User Task filenames containing spaces could not be started by dropdown
       menu in toolbar but only in "Start Tasks" window.

- New: Added support for TLS negotiation of secure connections. The former
       "Use secure connection" checkbox was replaced by a dropdown combo,
       where "SSL (secure port)" is the old mechanism and the new one is
       called "SSL (TLS handshake)". {JW/JH}
       (HControl -> Config. -> Remote Servers -> Common)

- New: SSL version and cipher string can be configured now. {JW}
       (HControl -> Config. -> Remote Servers -> Common)

- Chg: New default version for SSL connections is "SSL v3" now, the former one
       ("SSL v2/v3") can be selected in the new SSL settings mentioned above
       if this change causes any problems. "TLS v1" wasn't used as default,
       as the commonly used secnews.netscape.com did show problems with this
       setting, but you might want to give "the best one" a try for other
       servers.

- Fix: Script expressions containing parens could give false results (e. g.
       "(40-30)-20+50" resulted in -60 instead of +40).

  // Marked changes provided by: {JW} Joern Weber
  //                             {.../JH} with major modifications by me


Vr. 1.12.1 (2003-11-02)

- Fix: Script command "AtExecute" started to eat up all cpu time after about
       30-60 seconds.


Vr. 1.12 (2003-11-01)

- Chg: Spam Report: Moved Subject: to top and Filter: to bottom; entries are
       now sorted by descending score values.

- Chg: Updated Indy components used for TCP/IP (now using vr. 9.0.14 with
       patches up to 2003-07-11).

- Fix: After 2 GB of data transfer, shown byte counters in HControl became
       negative numbers and after 4 GB, HService ... died.

- Fix: Disk Space Report didn't support file and directory sizes above 2 GB.

- New: New 'unless' operator for MailFilt.hst and Scores.hst to invert the
       final match result (-42 unless Subject "Hamster").

- Fix: Mail trap score of loaded mails was shown with a wrong value, in most
       cases 12. The score value in "X-Hamster-Info:" header was always 0.

- Chg: A new internal scheduler was added (see later below), which is also
       used for the At* script commands. As the new one works by calculating
       timepoints (based on given start time of day and repetition interval)
       and not by measuring intervals, this has side effects on At* commands:

       - Last parameter of script command AtAdd (called <immediate> in the
         help file) makes no sense any more and is therefore ignored now.
       - Result of AtAdd is always 0 on success, there is no index any more.

- New: "User Tasks" to group various tasks. Such "User Tasks" can then be
       executed all at once without the need to deal with scripts.
       (HControl -> Tasks -> Setup User Tasks)
       (HControl -> Tasks -> Start Tasks -> User Tasks)

- New: A "User Task" can also be used for actions by assigning its definition
       file (*.hut) instead of a script file (*.hsc).

- New: Added a setup window for actions.
       (HControl -> Tasks -> Setup Action Tasks)

       Note: The obsolete menu item "Configuration->Files->Script Actions" is
             still available but might be removed in one of next versions.

- New: A new, global scheduler was added to start repetitive tasks. Both
       scripts and new "User Tasks" can automatically be started by it.
       (HControl -> Tasks -> Setup Scheduled Tasks)

- New: Added some actions:

       - MailWaiting: Triggered right /after/ a new mail message has been
         placed in the outbox and is ready to be sent.

       - NewsWaiting: Triggered right /after/ a new news message has been
         placed in the outbox and is ready to be sent.

       - MsgWaiting: Triggered right /after/ a new mail or news message has
         been placed in the outbox and is ready to be sent (triggered after
         MailWaiting/NewsWaiting).

- Fix: Helpfile was not found when HControl was launched from a remote
       computer. {OZ}

- Fix: POP3 server's HELP command was not complete. {JW}       

  // Marked changes provided by: {OZ} Olivier Zolli, {JW} Joern Weber


Vr. 1.11 (2003-06-14)

- New: Saving info about deleted mails in a junk account can now optionally
       be skipped for mails deleted by MailFilt-KILLs, MailTrap-DELETEs or
       MailTrap-SCOREs below a given value. May be used to get rid of the
       well known spam but still keep the info for the doubtful ones.
       (HControl -> Config. -> Hamster -> Local Mail -> Save info/but skip)

- Chg: Additional line in junk backups giving the final score of Mail Traps,
       also shown in the subject of the mail now.

- Chg: Report "Mail Transfer": Added "Total" row and "Filtered %" column.

- New: Added new Mail Trap selections named '(contents)' and '(raw contents)'.
       Both extract and decode all text parts of multipart MIME messages, so
       you can filter on text contained in base64-encodeded parts with them.
       Selection '(contents)' additionally strips HTML <tags> from 'text/html'
       parts, so "hidden" words like "SPA<!--xyz-->MMER" or "SPA<xyz>MMER"
       are revealed as "SPAMMER" and can easily be filtered on. Web or image
       links are not stripped completely in this case, they are just converted
       to the unified format " [ URL ] " and remain filterable.

- Chg: Mail Trap test window modified:
       - Results are now updated automatically and immediately whenever the
         text of the message to be tested changes, either by pasting text from
         clipboard or by changing it manually.
       - A new page shows the text that is actually used for filtering with
         given header selections (e. g. with the new '(contents)' selection).

- Chg: Envelope lines at the very beginning of mail files placed in Mail.Out
       have their space after the colon back. It is removed when sending.

- Fix: Some major and minor fixes related with mail forwarding, especially
       with local forward loops and if 'admin' was involved in it. {OZ/JH}
       - A mail could get lost if forward settings gave no final recipient
         for the mail and just forwarded it around in a loop configuration.
         Such mails now cause a 'no recipient' error mail sent to 'admin'.
       - If 'admin' itself was part of a forward loop, error mails were also
         forwarded - causing forwarded error mails - causing ... - R.I.P.
         If delivery for 'admin' fails, such mails are directly stored in
         his mailbox now after an attempt to forward them has failed.
       - A "Received:" comment is added to all forwarded mails and this one
         can't be turned off by configuration to prevent from unterminated
         mail loops. The only somewhat "personal" information in it is the
         user ID of the account, that caused the forward.

- New: Daily maintenance now creates a daily "Spam Report" mail and sends it
       to a given account (default: admin). It lists Filter/Subject/From of
       all mails, that were filtered since last run.
       (HControl -> Config. -> Hamster -> Local Mail -> Send summary ...)

- Chg: Internal mails (created by Hamster) now have MIME headers declaring
       the active (Windows) character set. No encoding takes place, just to
       define the charset for any 8Bit characters in the body part of the
       mail (e. g. quoted Subject/From headers of filtered spam).

  // Marked changes provided by: {OZ} Olivier Zolli,
  //                             {.../JH} with major modifications by me


Vr. 1.10 (2003-05-18)

- New: Additional global filter for fetched mails called "Mail Traps", that is
       checked directly after loading (TOP lines of) a mail. Its only purpose
       is to sort out unwanted mails, either by specific rules or by scoring.
       (HControl -> Config. -> Mail Trap)

- New: Information about mails deleted by any filters can now be backed up in
       a mailbox of a user account for later review (default: admin).
       (HControl -> Config. -> Hamster -> Local Mail -> Save info ...)

       UPDATE NOTE:
       I've chosen to use "admin" as default here, so new users will have a
       backup of accidentally deleted mails when playing around with mail
       filters for the first time. This means, that old users will have to
       empty this setting or will have to assign a different junk account in
       order to get rid of these new notification mails in admin's mailbox.

- Chg: Default number of TOP lines to load for filtering mails was raised from
       20 to 50 (should not affect old users; just to preserve more info on
       accidentally deleted mails with default settings).

- New: Preloading of TOP lines to filter mails can now be bypassed based on a
       size limit. If reported size of a new mail is smaller than this limit,
       full mail is RETRieved immediately (default: 4096 Byte).
       (HControl -> Config. -> Hamster -> Remote Mail -> Skip TOP ...)

- New/Chg: Log files:
       - All log files except session logs (0.log, 1.log, ...) have changed,
         including filename, file format and (mostly) contained content.
       - Files are now "per month" files with "-YYYY-MM" added to the filename
         (e. g. "RasDial-2003-05.log").
       - Fields are now always separated by TAB characters. Meaning of leading
         fields is defined by position, other fields are identified by a
         "Identifier=Value" scheme.
       - All information is now always contained in one single line.
       - Timestamps are now always in format "YYYY-MM-DD hh:mm:ss".
       - New log files for actual usage of mail filters (MailFilters, MailTraps).
       - New log file for NNTP server (NntpServer; shows POSTed messages).
       - New log file for SMTP server (SmtpServer) shows sent messages).

       UPDATE NOTE:
       These changes will certainly affect all scripts and programs, that were
       previously used to evaluate these logfiles.

- New: HService now creates some static HTML reports in Daily Maintenance that
       can be viewed in HControl or with a web browser. Initial set of reports
       contains: Newsgroups Overview, Mailboxes Overview, Mail Filters (that
       actually deleted mails), Mail Traps, Disk Space.
       (HControl -> File -> Reports)

- Chg: Former helpfile Hamster.hlp was replaced by Hamster.chm.

       Windows 95 users might need to download and install an update to use it:
       http://msdn.microsoft.com/library/tools/htmlhelp/wkshp/hhupd.exe

       But just try to open the new helpfile first (HControl -> Help -> Help
       Contents, or just hit F1 key), you've presumably got all necessary
       files already with IE or other setups.

- Fix: "Max. no. of connections" settings for local servers only accepted one
       connection less than the given value.

- Fix: "Xref:" was missing in NNTP server's XOVER reply. {OZ}

- Fix: Missing step in client's "Digest-MD5" authentication mechanism. {OZ}

- New (source code only): HControl requires two new freeware tools to compile:
       - "HTML Help Kit for Delphi" (www.helpware.net; for new .chm helpfile)
       - "THtmlLite Component" (www.pbear.com; used to display .htm reports)
       Usage of both can be disabled in Compiler.inc.

- Chg: Log level to report already loaded mails lowered from info to detail.      

- Fix: Improved fallback for finding MX servers of domains not providing any
       MX records directly. {OZ}

- Chg: Only send one mail per recipient-domain in MX mode. {OZ/JH}

- Fix: RAS names containing spaces were missing or were only shown partly at
       HControl->Config.->Passwords.

- Chg: Rebuilding of global newsgroups list was very slow with large numbers
       of groups (>100K) and did block all newsgroup accesses while doing so.

- New: Option to automatically distribute fetched mails to accounts, that are
       recognized by any recipient information in the headers of the mail
       (like addaccounts-rules for Any-Recipient/*Received in MailFilt.hst).
       (HControl -> Config. -> Remote Servers -> POP3 -> Auto. distribute)

- New: The field "Local mail addresses" in Account settings now supports a
       "catch-all" fallback in format "*@mydomain". If no specific account is
       found (local mails, addaccounts-rules, auto-distribute), this account
       is used and will receive the mails. {SS/JH}

- Fix: Memory leak (TLogFile.FTaskBuffer).

  // Marked changes provided by: {OZ} Olivier Zolli, {SS} Stefan Schultze
  //                             {.../JH} with major modifications by me


Vr. 1.9 (2003-04-12)

- Chg: Completed AUTH/SASL support for POP3 (client and server).

- New: Experimental support for SASL authentication mechanism DIGEST-MD5.

- New: More detailed authentication settings for remote POP3 servers.
       (HControl -> Config. -> Remote server -> POP3).

- Fix: When deleting an account, the mailbox directory was not removed.

- Fix: When deleting an account, it was not removed from (all) mail lists.

- New: Basic SSL support for accessing remote servers (see "How to" in
       helpfile; requires additional files and setup).

- Fix: When sending mails, "MAIL FROM:" and "RCPT TO:" were given with an
       additional, invalid space character.

- Fix: Script function "int" caused errors instead of just returning 0.

- New: Additional, optional parameter for script function "int" giving the
       value that is returned when calling with unconvertable expressions.

- New: Optional parameter for script function "HamVersion" returning
       additional values. (TGL)

- New: Scripts now support "elseif". (TGL)

- Chg: Former limit of 32 supported RAS connections removed. (TGL)

- Fix: Use of uninitialized variables in script expressions did not show
       appropriate error in all cases yet.

- Chg: "sub"-parameters in scripts marked with a leading "*" are now true
       "by reference" parameters.

  // Marked changes provided by: {TGL} Thomas G. Liesner


Vr. 1.8 (15 DEC 2002)

- Fix: Restoring previous state and size of HControl's window fix^Wimproved.

- Fix: Message boxes and dialogs in HControl were partly in german.

- Fix: Known sender address was converted to local account name when sending
       mails to remote servers. Such mails might have been rejected by remote
       servers.

- Chg: All Live Mode requests now accept a trailing CR/LF, so script command
       HamRequest can safely be used for all commands now.

- New: Added "Original-Recipient:", "X-Resent-For:", "X-Resent-To:" and
       "Resent-To:" to checked headers in "Any-Recipient:" mail filters.

- Chg: Reloading the list of scripts in HControl now also refreshes internal
       list in HService, so manual changes in script folders are reflected.

- Chg: HamArtTextExport (scripts) now quotes all lines starting with "From ",
       so any import programs will at least recognize article boundaries.

- New: Script functions:
       - HamArtImportFile, HamArtExportFile
       - GlobalValueAppend
       - MsgHeaderExists
       - hr_*.hsm modules containing constants and more convenient wrapper
         functions for executing Live requests (HamRequest, HamRequestStr)

- New: New entity called "Mail Lists" for storing lists of muliple mail
       recipients.
       (HControl -> Config. -> Mail Lists).

- New: Mails received for an account can now be forwarded to a different
       account, a specific mail address or to the members of a mail list.
       (HControl -> Config. -> Accounts -> Mail).

- New: Forwarding mails to the members of a mail list can now be restricted
       based on the (authenticated) sender of the mail. If sender does not
       meet the given restriction, the mail is sent to the list owner only.
       (HControl -> Config. -> Mail Lists -> Accept from).

- Chg: Only one failure notification if a mail could not be sent out by any
       of the MX or fallback servers (former: failure notification for every
       attempt, although the mail finally could be sent out successfully).

- New: Separate button/menu-item to start script with parameters in HControl.

- Chg: Former thread ID in logfile lines (hex number within {}) was replaced
       by HService's internal, unique ID (decimal number within {} as well).

- Old^H^H^HNew: Parameter "-W" for scripts started by RC server in Telnet Mode
       is available again (-> wait until finished and send script output).

- Fix: If APOP authentication was requested for a remote POP3 server but this
       server either didn't support it or rejected it, there was a fallback to
       (cleartext) USER/PASS authentication.


Vr. 1.7 (17 NOV 2002)

- Fix: First server in list of newsservers was always treated as "readonly",
       so it was not possible to post to it.

- Fix: Adding a new server always showed a silly "server unknown" warning.

- Fix: A missing or invalid timepoint when a newsgroup was added had the
       effect, that the group was always reported as being a new one. This
       especially happened with internal.misc added automatically by Hamster.

- New: Some new functions to send mails directly to recipient's mail exchange
       (MX) servers:
       - new configuration file "SmtpRouter.hst"
       - new script command "HamSendMailMX"
       - new "Start MX" button on HControl's "Start Tasks -> Mail Out" page

- Chg: Show warning, if any of the stored passwords can't be decrypted again.

- Fix: Task counters were sometimes not updated in HControl when task ended.

- New: Script functions:
       - CharsetList, CharsetExists, CharsetDefault, CharsetConvert
       - Decode( 3, ... )


Vr. 1.6 (10 NOV 2002)

- Chg: Slightly modified posting of articles (send at once not line by line;
       reliable Detail-log entry after msg is out and waiting for response).

- Chg: Updated Indy components used for TCP/IP (now using vr. 9.0.10).
       
- Fix: Crosspostings to unknown groups always failed with 'no permission'
       regardless of account's patterns for allowed groups.

- Chg: More detailed log file entries if any requested newsserver/group/pull
       can't be found.

- Fix: Some fixes related with newsgroup names containing 8 bit characters.

- New: Script functions to share data between muliple running scripts and to
       synchronize them:
       - GlobalValueGet, GlobalValueSet, GlobalValueAdd, GlobalValueWait
       - GlobalEnter, GlobalLeave

- Chg: Improved transfer of (large) data from client to Hamster (SMTP-DATA,
       NNTP-POST). Same change for data transferred from remote servers to
       Hamster.

- Chg: Start of Daily Maintenance is now delayed for about two minutes after
       starting HService, so it does not slow down boot time.

- Chg: If a Message-ID is added to a mail received by POP3, it is now marked
       with ".nomid" in front of "@". An added Date is marked with "-0000"
       timezone.

- Chg: When decoding header values, known character sets are mapped to active
       codepage of computer running HService. Known character sets are: utf-8,
       utf-7, windows-1250/.../-1258, ISO-8859-1/.../-16, IBM437/850, KOI8-R.
       This affects: Filter lines with "~", script command "decode(2,...)".


Vr. 1.5 (26 OCT 2002)

- Fix: Scripts: MsgSetHeaders set body, MsgGetBody returned full article.

- Fix: Some futher problems fixed related with alias extensions for servers
       (some.serv.er/alias), e. g. when accessing server properties like its
       SMTP-AUTH settings.

- New: New global option to automatically delete mails left on server after a
       given number of days after loading them.
       (HControl -> Config. -> Hamster -> Remote Mail).

- Chg: Scripts: 4th parameter of HamScoreTest now selects which score value to
       return. By default it returns the final sum now.

- New: Extended 'X-Hamster-Info:' header of loaded articles to additionally
       show the score values of both runs ('ScoreLoad=... ScoreSave=...').

- Fix: If multiple connections from the same client were opened, some of them
       may have been refused without recognizable reason.

- New: Max. number of concurrent connections from same client can be changed
       now (former: fix limit of 4 connections).
       (HControl -> Config. -> Hamster -> Local Details).

- New: Option to disable a remote server temporarily.
       (HControl -> Config. -> Remote Server -> Common).


Vr. 1.4 (06 OCT 2002)

- Fix: Scripts: If a "sub" was left with "return", still active loops were not
       terminated, which either caused misleading errors or even unpredictable
       loop behaviour.

- Chg: Scripts: Scope of if/else/endif and all loops is now bound to current
       sub context, i. e. corresponding statements are only searched up to next
       "endsub".

- Fix: Retrieving large messages from Hamster was very slow.

- Fix: "Last Server Pull" and "Last Client Pull" were exchanged in HControl's
       newsgroups information.

- Chg: Default value for service setting "Interactive" changed to "False".

- New: Added NNTP server commands: AUTHINFO SIMPLE, MODE STREAM

- New: Script actions: Added "NewsIn" action.

- New: Script actions: Added "Silent" option for all actions.

- Fix: Alias extension for newsservers (news.serv.er/alias) did not work.

- Chg: Further optimized local servers: POP3-TOP, NNTP-LIST ACTIVE/NEWSGROUPS 


Vr. 1.3 (01 SEP 2002)

- New: Local SMTP server: Option to accept mails for local recipients without
       prior authentication (HControl -> Config. -> Hamster -> Local Mail).
       
- Chg: Local SMTP server: Unknown local and invalid addresses are now rejected
       immediately (former behaviour: send to "admin").

- Chg: Result of 'IniWrite' (scripts) is now -1 on error and 0 on success.

- New: Script functions:
       - Const: declare constants
       - ConstEnum: declare enumeration constants
       - Dump(True): also show constants
       - ListAppend: append list's content to a file
       - TimeToRfc/TimeFromRfc: convert time to/from RFC format

- Fix: Timestamps used for purging and NEWNEWS were missing in postings to
       local groups and in archive copies of posted articles, so the "Date:"
       values were used instead (-> new ones might not be reported on NEWNEWS).

- New: SASL mechanism "CRAM-SHA1".

- New: HControl: "View Selected Thread" added to context menu of task view and
       client list. Also called when double-clicking a line of these lists.

- New: Option to store posted articles in local groups immediately
       (HControl -> Config. -> Hamster -> Remote News).

- Chg: Unique identifiers of task and client threads (UID) now share the same
       numbers (former: independant numbers).

- Chg: HControl: More details on tasks list on what task is doing.

- Chg: Live Mode commands:
       - LMREQ_TASKS_LIST now additionally returns class name and state info
       - LMREQ_RUN_NEWSJOBS now returns UID list of started tasks


Vr. 1.2 (28 Jul 2002)

- Fix: Some logfile (error-) entries on startup forced HService to terminate
       immediately without any notice.

- Fix: Account "admin" did not have access to RC server after updates in some
       cases, preventing HControl from being used at all.

- New: Script functions:
       - DiskInfo: get free space of disk and its total size
       - MsgLoad, MsgSave: load/save message from/to file
       - HamNewMail: send mail by script
       - HamRequest, HamRequestStr: execute Live server requests
       - HamSendMail[Auth]: added optional To-selection

- Chg: Some (minor) optimizations regarding local newsserver access.

- New: Option to add milliseconds to timestamp in logfile entries
       (HControl -> Config. -> App. -> Logfile).

- New: HControl: "View All" and "View Selected Thread" added to context menu
       of log view. Second one is also called when double-clicking a log line.

- Fix: Possible race condition leading to an access violation with threads
       started by scripts, by Live server or in Daily Maintenance.

- Chg: Extended error checking and logging for script's Dll functions.

- Chg: Besides startup and shutdown messages, HService itself will only show
       errors, warnings and system messages while it is running.

- Fix: ParamStr(0) did not contain path if script was started by RunScript.

- Chg: Script action "MailInternal" removed - it is also a "MailIn" now.

- Fix: Possible deadlock when using old script commands "HamNewsPost" and
       "HamNewsPull". Newer "HamNewsJobs*" commands were not affected.

- Chg: Improved error checking and handling for group files (e. g. disk full,
       group file's size limit reached).

- New: Size limit of a group's data file raised from 2 GB to 4 GB.

- Chg: Script Actions: Definitions and parameters of message related actions
       have changed. Script now has direct access to the message text before
       it is saved to any file. See "Script Actions" in helpfile for details.

- New: Adding of "Followup-To: poster" header when redirecting mails to news-
       groups by "postto" rules (mail filters) can now be turned off.
       (HControl -> Config. -> Hamster -> Remote Mail)

- New: Completed/enhanced support for moderated and "news-to-mail" newsgroups:
       - Unapproved postings in moderated groups (=groups of type "m") can now
         be sent to its moderator by mail. If no moderator address is set, the
         group is like a "y" one (i. e. remote server handles "moderation").
       - Added a new group type "g" (gateway) to redirect postings to (e. g.)
         a mailing list. If no mail address is given, the group is like a "n"
         one (i. e. no posting allowed, user's are forced to use mail).
       See "group type" and "mail address" at (HControl->Config.->Newsgroups
       ->Settings) for details.

- New: Added "LIVE REQUEST <code>" command to execute a Live request in RC
       server's "Telnet Mode".

       
Vr. 1.1 (15 Jun 2002)

Due to heavy changes, there is no detailed list for this version, just a few
notes about remarkable ones:

- The outdated help file was replaced by an updated one. It is not completed
  yet, but there is also a "Todo" page in it, which contains the changes not
  documented or updated so far.

- Former Hamster.exe was replaced by two programs. HService.exe is the service
  program, which is intended to be run in the background and which does the
  actual work. HControl.exe is the client program, which talks to HService.exe
  by TCP/IP.

- Remote Control Server: Besides former "Telnet Mode", there is a new "Live
  Mode" for communication between HService and HControl.

- Scripts: Interactive script functions like "msgbox" were removed.

- Account "admin" now has a default password on new installations: "admin".

- Sourcecode: TCP/IP communication is now done with "Indy" components. To
  compile the sources, a current snapshot of Indy Vr. 9 is required (see
  http://www.nevrona.com/indy/).


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

Vr. 1.0.0.91 - 1.0.0.96 (02 Mar 2002)

- Fix: Scripts, module usage:

       - If "#!initialize" failed, the error message did not show the right
         module name.
       - Already loaded modules were not recognized and could therefore be
         loaded and initialized multiple times on multiple/cascaded "#!load".
       - Initialization of modules was in wrong sequence, so a module could
         have been used, although it was not initialized yet.

- New: Modules can now have a "#!finalize" to clean up ressources when script
       has finished. Syntax is exactly the same as with "#!initialize":

          #!initialize
             # initialize/allocate ressources before script starts
          return(0)

          #!finalize
             # free ressources after script has finished
          return(0)

       Notes:
       - If "#!finalize" is used, the module must also have an "#!initialize"
         (but not vice versa), and "#!initialize" must be located before the
         "#!finalize". If there's a "#!finalize" without prior "#!initialize",
         the script will not start and report an appropriate error message.
       - "#!finalize" will be executed for all modules, that were previously
         initialized. Therefore, it will always be executed, even if the script
         or a previously executed "#!finalize" has terminated with an error.

- Chg: Some former script "statements" (=can't be used in expressions) were
       turned into "functions". Those are, with their new result values:

       - sleep (given sleep time)
       - dump (0)
       - debug (previous debug level)
       - trace (previous trace setting, 0/1)
       - entercontext, leavecontext (new context ID)
       - var (number of variables)

- Fix: Scripts could not be started by menu of tray icon.

- Fix: Script commands "MemGetStr" and "MemSetStr" failed with a size of 0.

- Fix: Script command "wait" did not work.

- New: New Windows API-Module "hw_syncobjs.hsm".


Vr. 1.0.0.79 - 1.0.0.90 (03 Feb 2002)

- REMOVED:
     - OLE server and its functions
     - HAM.EXE (was based on OLE)
     - Plugins

- Fix: Script threads started by RC server without "-W" flag (wait) were not
       freed when script finished.

- Fix: Scripts started in "wait until finished" mode (e. g. started by HS2's
       "runscript") could sometimes lead to hangs or various exceptions.

- Fix: Number of logfiles was always 14 on initial startup.

- New: "Score-After-Load"

       - If lines in Scores.hst (=scorefile for pulling news) are preceded with
         a "?", these lines are tested AFTER the article was loaded. The syntax
         for a "ScoreRule" noted in (outdated) help file therefore changed to:

            ScoreRule = ["?"] ["="] ScoreValue 1*WSP ScoreSelection cEOL

         Furthermore, the "ScoreField" is not limited to overview values like
         in lines without "?". As the full article is available in this case,
         all headers can be used here, e. g.:

            ?+42 X-Posting-Agent: "Hamster"
            ?=-9999 NNTP-Posting-Host: "@known.spammer.domain"

         Beside such real header values, the fictitious "Score-Before-Load"
         headers "Bytes", "XPost", "Number" and "Age" also work here. And, last
         but not least, there are additional ones named "Header" (anywhere in
         header lines), "Body" (anywhere in body lines) and "Article" (anywhere
         in article), e. g.:

         ?+42 Article "Hamster"
         ?+42 Header "Hamster"
         ?+42 Body "Hamster"

         Note: The MIME decoding by preceding the field name with a "~" does
         not work for these special keywords.

       - If - after loading the article - the score value of all "?"-lines is
         below zero, the article is ignored and will not be saved. Like with
         "Score-Before-Load", there will just be an entry in file Kills.log.

       - The final score value noted in Hamster's "X-Hamster-Info:" header of
         a stored article will be the sum of both score values (i. e. "before
         load" plus "after load" score), limited to +/- 9999.
         The entry in Kills.log for a loaded but not saved article will only
         contain the (negative) "after load" score value.

- New: NNTP server command "XHSEARCH" for searching articles in Hamster's
       news database. It has to be enabled per user with a "NewsXHSearch=1"
       line in file "Accounts.!!!".

       - Format 1, single line: XHSEARCH groupregex field patterns

         "groupregex" is a regular expression for the names of newsgroups, in
         which articles should be searched.

         "field patterns" is the same as the part named "ScoreSelection" of
         scorefile lines, i. e. a scorefile line without the leading score
         value. The "field" values (="ScoreDefField") are the same as with
         "Score-After-Load", e. g. special values like "article" and "body"
         are also allowed here.

         Example:
            xhsearch ^hamster\..* subject hamster hamrc

       - Format 2, multiple lines: XHSEARCH

         Like above, but parameters are given on separate lines, up til a line
         with a single dot ("."). The parameters have to be marked with a
         leading "GRP" for "groupregex" and "PAT" for "field patterns".

         If multiple "GRP" lines are given, the additional ones extend the
         list of groups selected so far. If a pattern starts with a "-", the
         groups selected by the following pattern are removed from the list.

         If multiple "PAT" lines are given, they all have to match.

         Example:
            xhsearch
            grp ^hamster
            grp software
            grp -\.announce$
            pat subject hamster hamrc
            pat article xhsearch
            .

       - For each article found, one line with the name of the newsgroup, the
         article's number and Message-ID is returned (with values separated by
         a single TAB):

            (groupname) TAB (article number) TAB (Message-ID)

         The result list may also contain embedded comments, which are lines
         starting with a dot, immediately followed by a keyword. Currently,
         there is only a final summary line with the number of articles found
         and the number of articles tested:

            .summary TAB (found) TAB (tested)

         The result list ends with a line containing only a single dot (".").

- New: NNTP server command "XHHELP" - like HELP, but for XH commands.

- New: Script functions:

       - $score = HamScoreTest( $grp, $art, $log, True )

            If new 4th parameter is given and true, the "Score-After-Load"
            value of the given article is returned instead of its "Score-
            Before-Load" value.

       - $art = HamArtTextByMid( $mid )

            If an article with the given Message-ID is available, its text is
            returned else an empty string.

            Please note, that only Message-IDs of articles work here, that are
            within the "Days to keep data: History" range. Older articles are
            not accessible with this function.

       - $count = HamArtSearch( $ParamList, $ResultList )

            Like the multiline version of NNTP server's new XHSEARCH command,
            this new script command searches for articles in Hamster's news
            database.

            $ParamList is a list that has to be filled with parameter lines in
            the same format as with XHSEARCH, i. e. "GRP ..." and "PAT ..."
            lines.

            $ResultList will be filled with the same [1] info for matching
            articles as with XHSEARCH, i. e. "Groupname TAB Article-Number TAB
            Message-ID".

            [1] One exception: No "embedded comments" here, so each line in
                $ResultList will be the info of a matching article.

            Example:
               VarSet( $lp, ListAlloc )
               ListAdd( $lp, "grp ^hamster" )
               ListAdd( $lp, "grp software" )
               ListAdd( $lp, "grp -\.announce" )
               ListAdd( $lp, "pat subject hamster hamrc" )
               ListAdd( $lp, "pat article xhsearch" )

               VarSet( $lr, ListAlloc )
               HamArtSearch( $lp, $lr )
               Print( ListGetText( $lr ) )

               # Tip: To split a result line into its parts, use RE_Split:
               #    Var( $i, $Line, $GrpNam, $ArtNo, $ArtMid )
               #    For( $i, 0, ListCount($lr)-1 )
               #       $Line = ListGet( $lr, $i )
               #       RE_Split( $Line, "\t", $GrpNam, $ArtNo, $ArtMid )
               #       Print( $GrpNam, " ", $ArtNo, " ", $ArtMid )
               #    EndFor

            The return value is either the number of articles found (>=0) or
            an error marker: -1=invalid script parameters, -2=invalid search
            parameters ($ResultList will contain error message in this case).

- Chg: Removed former limit of at least 42 characters in mailtext when sending
       a mail to SMTP server.

- Chg: Leading and trailing spaces in header values returned in overview data
       by NNTP server are now left intact. CRLF pairs of folded header lines
       are removed ("unfolded"), not replaced by spaces.

- New: SOCKS support for connecting to external servers through firewalls and
       routers, which provide a SOCKS server for this purpose (e. g. AVM's
       KEN!). The common settings used for all connections are defined under
       [Setup] in Hamster.ini:

          socks.version=0
             0=None - connect directly, 1=SOCKS V4, 2=SOCKS V4A, 3=SOCKS V5
          socks.server=
             Name/IP of SOCKS server
          socks.port=1080
             Port of SOCKS server (mostly 1080)
          socks.auth=0
             0=No authentication, 1=Username+Password (SOCKS V5 only)
          socks.user=
          socks.pass=
             Username and password for authentication with socks.auth=1. You
             can also set socks.user to one of the multi purpose passwords
             (e. g. $20) to avoid noting these values in cleartext here.

       If socks.version is set to 1, 2 or 3 and socks.server and socks.port
       are given, all connections to external news and mail servers are then
       established through the given SOCKS server.

       To avoid using SOCKS for specific servers in this configuration (e. g.
       to access an "intranet" server), you have to edit the file Server.ini
       for such servers and change/add the following setting under [Setup]:

          socks=0
             0 = Never use SOCKS when connecting to this server.
             1 = Default = Use SOCKS, if it's configured in Hamster.ini.


Vr. 1.0.0.73 - 1.0.0.78 (03 Jan 2002)

- Fix: Error-variable of script-commands "Decode" and "Encode" (optional 4th
       parameter) was never set.

- Chg: RC server:
       - Support for script files in sub-directories of script's base dir;
         format for LIST/START is: Path1\Path2\Scriptname.hsc
       - Path- and file names used with SCRIPT command may only contain the
         following characters: 'a'..'z', 'A'..'Z', '0'..'9', '_' and '-'.
         Additionally, '.' is allowed in extension ('.hsc' or '.hsm') and '\'
         or '/' are allowed as path separators.
       - Parameters may be "double quoted"; needed if a parameter contains a
         space (e. g. regular expressions).
       - Modules (*.hsm) are also accessible.

       - SCRIPT DIR: Like LIST but with additional info (time/size).
       - SCRIPT DEL: Delete a script file.
       - SCRIPT GET: Download a script file.
       - SCRIPT PUT: Upload a script file.
       - SERVER LIST: Lists states of all servers.
       - POLICY LIST: List policy settings for current user.

       - User's "RemoteControl=" setting in file "Accounts.!!!" now determines
         his "RC policy group" - a group describing the accessible commands if
         user connects to the RC server.

         Two groups are predefined and can't be changed:
         - "0" or a missing value always means "No access".
         - "1" enables commands which just send info but do not change
               anything or start any action.

         Further groups ("2"..."9") can be defined in Hamster.ini in separate
         sections named "[RC policy <number>]". Each command for which access
         should be granted, must be listed here with the format of allowed
         command lines. Format: "Command <command>=<commandline-regex>".

         Example: A group "2" which only enables adding of new groups/pulls:
            [RC policy 2]
            Description=New groups and pulls only
            Command NEWS=^NEWS\s+(LIST|ADD).*$

         Example: A group "9" for administation enabling all commands:
            [RC policy 9]
            Description=Administration
            Command LOG=^LOG\s+(LIST|ROTATE).*$
            Command NEWS=^NEWS\s+(LIST|ADD|DEL).*$
            Command POLICY=^POLICY\s+(LIST).*$
            Command SCRIPT=^SCRIPT\s+(LIST|DIR|START|STOP|GET|PUT|DEL).*$
            Command SERVER=^SERVER\s+(LIST|STATE|START|STOP|RESTART).*$
            Command TASK=^TASK\s+(LIST).*$

         To not accidentially enable the dangerous "SCRIPT PUT" command by an
         inappropriate regular expression, it additionally has to be confirmed
         with a 'Confirm SCRIPT PUT=1' line in the policy section.


Vr. 1.0.0.65 - 1.0.0.72 (26 Dec 2001)

- Fix: SASL challenge never changed while servers were running.

- Fix: Script command 'dllcall' failed with exception in THscParsedFunc.

- Chg: Logfile lines now contain a marker describing the type of the log line:
       'ERR' (Error), 'WAR' (Warning), 'Sys' (System), 'I  ' (Info),
       'D  ' (Detail), 'd  ' (Debug), 'f  ' (Full).

- Fix: Events created by a Hamster running as a service under local system
       account were not accessible outside of Hamster.

- New: Script functions:

       - Decode( Type, String [, Keyword [, ErrVar] ] )
            Returns decoded value for the given string. Supported types are
            0 (base64), 1 (quoted printable), 2 (QP/B64 in headers). 3rd
            parameter is not used so far. 4th parameter can be a variable
            receiving success of decoding (<>0: ok, =0: failed).

       - Encode( Type, String [, Keyword [, ErrVar] ] )
            Similar to Decode() above, but encodes the given string. Type *2 is
            not supported here.

       Note: Decode/Encode of types 1 and 2 can only be used for very simple
             purposes like making something "readable" for human beings.

- New: Simple, 'sub'-based profiler for scripts. Activated by a '#!profiler 1'
       pre-processor command, it collects usage and timing information while
       script is running and finally creates a report when script ends (saved
       to log file). If activated with '#!profiler 2', it also notes the call
       stack for each sub in the final report.

- New: A set of script functions to handle usenet-/mail-messages:

       $Msg = MsgAlloc( [$Text] )
       $ok  = MsgFree ( $Msg )
          Allocates/frees a message.

       $Text = MsgGetText( $Msg )
       $ok   = MsgSetText( $Msg, $Text )
          Gets/sets the message text.

       $Hdrs = MsgGetHeaders( $Msg )
       $ok   = MsgSetHeaders( $Msg, $Hdrs )
          Gets/sets all header lines.

       $Body = MsgGetBody( $Msg )
       $ok   = MsgSetBody( $Msg, $Body )
          Gets/sets all body lines.

       $HdrVal = MsgGetHeader( $Msg, $HdrNam [, $Separate] )
          Get value of given header, empty string if not found. If header has
          continuation lines, the values of these lines are either appended to
          $HdrVal, each separated by a single space ($Separate=false, 0 or
          missing) or are returned "as they are", i. e. with CRLF separators
          and indentation left intact ($Separate=true or <>0).

       $ok = MsgAddHeader( $Msg, $HdrNam, $HdrVal )
          Add a header with given name and value, even if there's already one
          with the given name. $HdrVal may also contain continuation lines
          separated by CRLF and indented appropriate.

       $ok = MsgSetHeader( $Msg, $HdrNam, $HdrVal [, $XHdrNam] )
          Like MsgAddHeader, but also removes an already existing header with
          the given name. If 4th parameter is given, the value of such a
          removed header is saved under the name given here.

       $ok = MsgDelHeader( $Msg, "Foo:" )
          Removes the given header line.

       Notes on variables used in description above:
          $Msg: Identifier for an allocated message. If one of the functions
                is used with an invalid $Msg, the script stops with an error.
          $ok : Will be 0 on success and <>0 on errors.
          $HdrNam: Full name of header, e. g. "From:", "Subject:", "Date:".
                   Trailing colon is optional, upper-/lowercase doesn't matter,
                   so "fRoM" is the same as "From:" here.
          $Text, $Hdrs, $Body: String containing lines ending with CR+LF.

- Chg: Optimized GROUP response time, if auto-subscribe is enabled.

- Chg: Updated to most current PCRE version (Vr. 3.1 -> Vr. 3.7).

- Fix: Password wasn't checked when logging in into RC server by SASL/CRAM-MD5.

- Fix: Client threads were not removed from "Threads" window if connection was
       lost or a server with active connections was stopped.

- Chg: A client will now be disconnected from local servers, if something
       unexpected happens (former: error only, but connection remained).


Vr. 1.0.0.43 - 1.0.0.64 (25 Nov 2001)

- Fix: Worst case fixed when pulling news, which could lead a pull-thread to
       look for a news-job a long time.
- Fix: HS2's expression cache wasn't case sensitive, so a quoted string in an
       expression like "a" could become "A" or vice versa.
- Chg: Unread group statistics raised to 3 days (friday til monday).
- Fix: Initial multiline-reply from remote SMTP-server was not handled yet.
- Fix: All Windows 98 versions were reported as being "SE".
- Chg: Further optimized and cleaned up script-code.
- Fix: Script-command 'for' failed if loop was called recursively.
- Fix: If compiled with Delphi 6, script-commands 'inputbox' and 'listbox'
       caused script to hang and calling a self-defined 'sub' could sometimes
       lead to a "Variant array index out of bounds"-error.
- Fix: 'list active.times' executed 'list active' (NNTP server).
- New: Also report 'auth=' on 'ehlo' for mozilla (SMTP server).
- New: Script functions:
       - Random( X )
            Returns a random number in range ( 0 <= result < X ).
       - Digest( Type, String [, AsHex] )
            Returns checksum/digest for the given string. Supported types are
            0 (CRC32, integer), 1 (MD5, 16 chars), 2 (SHA1, 20 chars). If 3rd
            parameter is given and true (<>0), the digest is returned as a hex
            string.
- New: "Full log"-option of former versions was integrated again. It can be
       enabled manually by setting "log.file.mask=" and/or "log.view.mask="
       under [Setup] in Hamster.ini to a value of "FFFF".
- Fix: AUTH LOGIN (server-side) ignored a username sent with AUTH-line.
- New: Plugin-interface for testing purposes. Do not use, as specification is
       not stable yet.


Vr. 1.0.0.0 - 1.0.0.42 (29 Sep 2001)

- Chg: Misleading warning changed if a newsserver returned no groups after
       "LIST".
- Fix: Under rare circumstances, the "Purge" function could destroy the data-
       file of a newsgroup ("damaged data-pointer" effect).
- Chg: Faster startup by creating statistics in a separate thread and by an
       optimized method for determining initial values of article counts.
- New: Create statistics not only on startup, but also on day changes.
- Fix: Rebuilding of global lists sometimes did not start.
- Chg: Misleading error message changed if an undefined value was used as a
       parameter for return()-function (HS2).
- Fix: Commandline parameter "/svc" did not prevent from terminating program
       yet if user just logged off.
- Fix: Quoted usernames and mail-addresses with multiple '@' were not
       recognized as local users.
- Chg: Avoiding of concurrent pulls for the same group was far too weak.
- New: Prevent from loading the same article concurrently (similar to Heiko
       Rosts solution in Future/Classic).
- Fix: NNTP-Client now sends "MODE READER" before "AUTH".
- New: Limit number of concurrent transfer tasks like the number of threads
       pulling news. The default value is 8 concurrent tasks, further tasks
       are suspended until other tasks have finished again (similar to Joern
       Weber's and Heiko Rost's solution in Future/Classic).
       Hamster.ini-setting: [Setup] tasks.limit=8
- Chg: Changed start sequence of NewsJobs-threads to minimize number of
       concurrent connections to a specific server if task-limit is reached
       (old: A1 A2 A3 A4 B1 B2 B3 ..., new: A1 B1 C1 D1 A2 B2 C2 ...).
- New: Local NNTP-server now supports NEWNEWS-command. It has to be enabled
       per user with a "NewsNewNews=1" line in file "Accounts.!!!".
- Fix: Index files of articles were not written to disk immediately after
       changes, if the group was still open by another thread.
- Chg: Put newspull-job back to job-list if connect or newspull fails, so if
       another thread for same server is more successful, it will be executed.
- Chg: Preferred HELO/EHLO-domain used for SMTP is now the configured FQDN.
- Chg: Old-style .hsc-Scripts are not supported any more.
- Fix: No (unintended) error message any more if RAS is not installed.
- Fix: Race condition fixed in local servers, which sometimes caused GPFs when
       a client connected.
- Fix: When loading descriptions for new groups, it was not detected yet if the
       newsserver really supports the command used by Hamster (Server.ini,
       [NewGroups], LoadDescs=0, 0=auto-detect/1=load always/2=load never).
- New: Local servers can now be bound to a specific local address. By default,
       all servers are now bound to "127.0.0.1" (="localhost"), which makes
       them unreachable for external request.
       Hamster.ini-settings under [Setup]:
          local.bind.nntp=127.0.0.1
          local.bind.pop3=127.0.0.1
          local.bind.smtp=127.0.0.1
       To open the servers like in previous versions, add these settings with
       no value or a value of "0.0.0.0". Changed values will take effect after
       restarting the servers.
- New: Limit number of active client connections to local servers.
       Hamster.ini-settings under [Setup]:
          local.clients.nntp=10
          local.clients.pop3=10
          local.clients.smtp=10
- New: Limit number of concurrent connections from a specific client to local
       servers (fixed: 4).
- New: Due to abusive use of periodic news pulls, Hamster now rejects pull
       requests from a specific server, if the period between last and new
       request is below 14 minutes.
       Hamster.ini-setting: [Setup] pull.limit.frequency=14
- Chg: IPAccess.hst will now be reloaded when a server is (re-) started.
- Chg: Optional "X-Posting-Agent" header replaced by "User-Agent".
- Chg: Optimized .hsc-scripts to run significantly faster.
- New: Added support for dynamic memory allocation in .hsc-scripts:
       -  $ptr = MemAlloc( $size ) # allocate memory block of given size
       -  $size = MemSize( $ptr )  # return allocated size of memory block
       -  MemFree( $ptr )          # free memory block
       -  MemForget( $ptr )        # don't free memory block when script ends
       -  MemSetInt( $ptr, $int )           # copy integer value to memory
       -  $int = MemGetInt( $ptr )          # copy integer value from memory
       -  MemSetStr( $ptr, $str [, $len] )  # copy string to memory block
       -  $str = MemGetStr( $ptr [, $len] ) # copy memory block to string
       -  $ptr = MemVarPtr( $variable ) # return a pointer to var's value
- New: A set of Dll*-functions was added to invoke functions located in a
       dynamic link library (*.dll), especially functions of Windows API:
       -  $hdl = DllLoad( "name.dll" ) # LoadLibrary
       -  DllFree( $hdl )              # FreeLibrary
       -  print( DllLastError ) # GetLastError-value of last DllLoad/DllCall
       If a .dll is (pre-) loaded with DllLoad, this instance is automatically
       used when calling one of its functions. If a function is called without
       such pre-loading, the .dll is loaded temporarily for each call.
       -  $result = DllCall( $declaration [, $par1, $par2, ..., par11] )
       The declaration for a .dll-function consists of 4 parts separated by a
       "|" character, e.g. "user32.dll|GetWindowTextA|n|nnn". First part is the
       name of the .dll-file, second part is the name of the function. Third
       part is the result type of the function, which can be either "v" (void)
       for no result or "n" (number) for a 32 bit value (DWORD, Pointer etc.).
       Fourth part describes the types of each function parameter, either a
       single "v" (void) for no parameters or a single character for each
       parameter. Like in third part, a "n" (number) marks any 32 bit parameter
       (DWORD, LPSTR, INT, WORD - note: smaller types are expanded to 32 bit).
       There's also (very limited) support for callback-functions, where the
       callback-function-parameter has to be set to either "1" (cb receives 1
       parameter) or "2" (cb receives 2 parameters). See commented example
       "sub ApiEnumWindowsList()" in hw_windows.hsm for details on these.
       See also: Windows API examples in hw_*.hsm and hw_demo.hsc.
- New: The new .hsc-function 'wait' behaves like an API Wait*-function invoked
       by DllCall, but also returns if the script is stopped for any reason:
       -  $result = wait( $INFINITE, WaitableObject1, WaitableObject2, ... )
       Results: -2=Failed (-> DllLastError), -1=Timeout, 0=Script-Stop,
                1=WaitableObject1, 2=WaitableObject2, ...
- Chg: Ressources allocated by .hsc-scripts are now guarded by a more flexible
       ressource-controller. It also guards the new types (allocated memory and
       loaded libraries) and frees them automatically when script terminates.
- Fix: Possible endless-loop when a .hsc-script reports an error.
- New: Split large pulls (>300 articles to load from a single group) into more
       effective, smaller ones (200) (similar to Wolfgang Jaeth's solution in
       Future/Classic).
- New: Added support for CRAM-MD5 and PLAIN mechanisms on SMTP AUTH. The new
       defaults are now:
       Server-setting in Hamster.ini under [Setup]:
          local.smtp.sasl=CRAM-MD5 PLAIN LOGIN
       Client-setting in .\Servers\(server)\Server.ini under [SMTP]:
          SASL=CRAM-MD5 PLAIN LOGIN
- Chg: GROUP (NNTP server) now reports exact number of articles in group.
- New: Mark last server-pull of a group in group's Data.ini ("[Info]
       LastServerPull=<timestamp>").
- New: Once per day, either on startup or when day changes, a thread named
       "daily maintenance" is started. It executes different tasks, if they
       are enabled under [Setup] in Hamster.ini:
          daily.statistics=1
             ; create statistics-posting (0=no; 1=yes)
          daily.buildlists=1
             ; like menu-item "Rebuild global lists" (0=no; 1=yes)
          daily.unsubscribe=0
             ; remove pulls/groups, that are not used any more (0=no; 1=yes)
             ; see new "Auto unsubscribe" function below for more details
          daily.purge=0
             ; purge (same par as HSC-HamPurge: 0=no ... 15=1+2+4+8=all)
- New: "Auto unsubscribe". If a group was not read with a newsreader for some
       time, its pulls and the group itself can now be deleted automatically.
       Deletion takes place in "daily maintenance", if it's enabled with a
       "daily.unsubscribe=1" line under [Setup] in Hamster.ini. Furthermore,
       minimum number of days between last access and deletion has to be given
       with the following settings (default is 0 days, i.e. don't delete):
          autounsubscribe.pulls=0
          autounsubscribe.groups=0
       Notes:
       - Only groups, that are/were pulled from a remote server, may be removed
         by this function. Internal or local groups are never affected by it.
       - It's possible to protect a group from being unsubscribed automatically
         by adding "autounsubscribe=0" under [Setup] in group's file data.ini.
       - "Auto unsubscribe" does not delete any groups or pulls, if no groups
         were read within last two days. This prevents from losing all groups
         immediately after a long period of non-pulling (e.g. holiday).
       - A group is not deleted immediately, if it is still pulled from any
         server. Instead of deleting the group, all pulls are deleted first
         and the group remains intact until next daily maintenance.
- New: "Auto subscribe". If an unknown newsgroup is read with a newsreader, it
       can be created automatically now if it's available on any of the remote
       servers. If wanted, this behaviour has to be enabled per user with a
       "NewsAutoSubscribe=..." line in file "Accounts.!!!". Valid settings are:
          0: do not add groups and pulls automatically (default)
          1: automatically add group and one pull for preferred or first server
          2: automatically add group and pulls for all servers
       Notes:
       - If a group is created this way, a short placeholder article is placed
         in it, giving feedback that articles will be loaded on next pull.
       - If a group is already pulled from any server, settings 1 and 2 do not
         add any additional pulls (just because check is very time consuming).
       - "read with a newsreader" means "selected with NNTP's GROUP command".
- New: Users with "auto subscribe" enabled (see above) receive a full list of
       all available groups of all servers, so they can add groups/pulls just
       by subscribing it in their newsreader.
       Notes:
       - The base for this full list is file alldescs.txt in Hamster's Server-
         directory. This file is updated when starting menu-item "Rebuild
         global lists" or (now by default) once a day by "daily maintenance".
       - When asking for new groups, only new groups in Hamster are reported,
         not new groups on any of the newsservers. You have to use your news-
         reader's "Get all groups" function to get an up-to-date list.
- Chg: Optimized "Rebuild global lists" function.
- New: Highest local article number of a deleted newsgroup is now saved in file
       .\Groups\savegrp.ini. If such a group is re-subscribed later, this value
       is used as the starting point for the group, as most newsreaders would
       not read new articles with already used numbers.
- New: It is now checked on startup, that Winsock2 is installed (required by
       this version). If not, an error-message appears and local servers are
       not started. This should only affect some Windows 95 systems, which need
       the Winsock2-update from: http://www.microsoft.com/windows95/downloads/
- Chg: Removed localization routines, so this version is solely in english.
- New: A new local server named "Remote control-server" was added, which allows
       access to some Hamster functions like starting scripts, adding groups,
       viewing log etc. Connect to it with a telnet-program and enter "HELP"
       for the list of supported commands and "HELP <command>" for more details
       on each command.
       Access to the server has to be enabled per user with a "RemoteControl=1"
       line in file "Accounts.!!!". The keyword to be used in file IPAccess.hst
       is "RECO" (the keyword "ALL" also includes it now).
       The server's settings and defaults under [Setup] in Hamster.ini are:
          local.port.reco=23
             Port number to use (default=23=telnet)
          local.autostart.reco=0
             Automatically start when Hamster is started (0=no, 1=yes)
          local.bind.reco=127.0.0.1
             IP address, the server is bound to.
          local.clients.reco=10
             Max. number of active client connections.
- New: AUTH-support for local POP3 server (RFC 1734).
- New: CAPA-support for local POP3 server (RFC 2449).
- Chg: Sourcecode:
       - Removed need for RX-library (by removing editor-selection).
       - Added an include-file named "Compiler.inc" used by all units, which
         contains mandatory compiler-settings and compiler-specific defines.
         New default for $WRITEABLECONST changed to OFF (default in D6).
       - Should also compile now with Delphi6 without errors and warnings.
- Fix: Just return '<0>' as Message-ID if article does not contain one on
       NNTP's ARTICLE/HEAD/BODY/STAT-command.

-----------------------------------------------------------------------
| The starting point for this version was:
|    Hamster Classic Vr. 1.3.22.0
-----------------------------------------------------------------------

