Copyright: Hamster Classic version  2.0.0.0  (aka 1.3.24 beta)


Introduction

Hamster-Classic Vr. 2.0.0

Translated by Lawrence Mitchell

As a starting point to the program the following help subjects are recommended: Installation describes the first steps needed in setting up Hamster. The menu structure describes the functions of each menu item. There is a subsection about safety issues when using hamster in the FAQ-area of this help-file.

Pointers to additional information, example Hamster-scripts and complete add-on programs can be found under links for information and help to the hamster.

A list of important changes between program versions can be found under version information. A complete list of changes can be viewed and searched from menu " Help / History...". These files ("changes_en.txt" for English, "Changes_de.txt" for German) are located in the Hamster root directory.

To automate certain activities, Hamster uses an embedded scripting language, Hamster-Script version 2 (hs2) (*.hsc)

If this language does not offer enough functionality, there is the possibility of calling scripts written in other languages such as Perl, VB-script, Delphi, etc. This can be done in a number of ways, on the one hand the Hamster-Event-Objects (Win32) and the Hamster-Mutex-Objects (Win32), but above all the OLE-interface to other programs which contains all relevant Hamster functions of the embedded scripting language in a practical manner.

You will find information about the construction of Hamster's root directory under files and directories. For special configuration files there are the additional help subjects File: IPAccess.hst (How to restrict access to Hamster by IP address), File: Scores.hst (A score/killfile for incoming news articles), File: MailFilt.hst (A score/killfile for incoming mails), File: Hamster.ini (Hamster's configuration variables, which are only partly contained in the Configuration menus) and File: Server.ini (for Server-specific settings).

A list of possible error messages - sorted according to error type - can be found under error-codes and error-messages. Frequently asked questions are explained in the section FAQ's.

And finally expressions of thanks and licence and copyrights. See the menu "Help/Info" for further information regarding the Hamster version (current maintainer, author, website, etc.)

Source: C:\AA\Src20020607\EnHlp\html\hams13fy.htm - (0)


Overview

Hamster-Classic Vr. 2.0.0 (22.12.2002)

Translated by Lawrence Mitchell

Hamster is a local mail and news server for Windows-platforms. (Win9x, WinNT, Win2000, Windows XP, but not for Win3.x). This software (freeware) is directed at all those who want to administer mail and news comfortably with a single program. Hamster can collect mail and news from several servers and gathers them together locally from where they can fetched by a client (Mailreader/Newsreader). It is therefore ideal for networks, as multiple users with access to Hamster can be set up. This means that News need only be pulled once for the network, rather than once for each user.

Release Notes

Installation
A short introduction
FAQ or list of the more frequently occurring problems
Important aspects regarding the safety of Hamster
Links to more information and help for Hamster

Menus

Hamster-Scripts (*.hsc / *.hsm)
Hamster-Event-Objects (Win32)
Hamster-Mutex-Objects (Win32)
Interface to programs (OLE)
Remote Control of Hamster

Files and directories

File: IPAccess.hst
File: Scores.hst
File: MailFilt.hst
File: Hamster.ini
File: Server.ini
File: Malias.hst

Error-codes and error-messages
Regular Expressions in Hamster
Overview of the data flow of news-articles in Hamster

Expressions of thanks
License and copyrights

See also the menu "help/information" for more information regarding the version of the hamster (Maintainer, author, download etc).

The latest info for the English help for Hamster release and beta-version can be found at:
http://home.hetnet.nl/~ojb-hamster/index.html

This site contains the work-in-progress English help as html-pages.
Once the translations are fully finished these will also be made available as downloadable helpfiles for Hamster.

The latest versions of the German helpfile for Hamster release and beta-version can be found at:

http://home.t-online.de/home/joern_weber/HAMSTER_HLP_DE.ZIP and
http://home.t-online.de/home/joern_weber/HAMSTER_HLP_DE_BETA.ZIP

Source: C:\AA\Src20020607\EnHlp\html\hams3qt0.htm - (1)


Installation

Installation

Translated by Lawrence Mitchell / Obbe-Jan Bakker

Translation (partially) from German text by Volker Gringmuth.

Installation

1. Create a new folder for Hamster, e.g. “c:\hamster\”.

2. Unpack the downloaded archive(s) into this new folder.

Note! for installing a beta version.

For a new installation always first unpack the latest release version prior to unpacking the archive for a newer beta version.

This is necessary because beta releases are considered updates to the latest release version and are not complete.

3. Start the program „hamster.exe” in the new folder and select the desired language in the appearing dialog. Now Hamster is running. The subfolders and other necessary files have been created automatically now you have started Hamster for the first time. Should the main window of Hamster not be visible, double-click on the small yellow (rodent) icon in the system tray.

4. If you want to update an existing hamster installation, you need to close (not just minimize!) the current hamster if necessary and then unpack the new archives into the hamster folder. All files can be overwritten, without losing any settings of your hamster-configuration.

If you have set different subfolders for scripts/modules etc. be sure to manually update the standard hamster modules (hwindows.hsm etc.) in these folders.

Setup for the password of the administrator

For your mail or newsreader to have access to Hamster, it is necessary to give the automatically created user “admin” a password.

1. Select the menu-item "Configuration/Accounts & passwords..." and click on the tab "Local accounts". This page contains a list with the names of all registered (existing) local users (in new installation only "admin").

2. Select the user “admin”, click on the button "Edit", and choose tab "General". (Please be aware, do not choose the Group "Admin, Administration".

3. Next to the password field, select "Change". you will then be asked to enter a new password, once you have entered the password, click "OK", you will then have to confirm the password. Now the password field should be "{SET}", indicating that a password has been set. The password itself will not be visible.

4. Finally, click "OK" at the bottom of the page. The list of the local users should then right of user “admin” show "{SET}" instead of "{NONE}".

The password itself will not be visible.

Setup of the Newsreader

For your newsreader to use Hamster as a server, you have to configure it accordingly with the correct server- and username so that the newsreader gets its news from Hamster instead of from an external server.

The servername should be 127.0.0.1. This is the IP-address of the local computer. In most cases, the name localhost can be used instead.

The username should be "admin" and the password the same as that which you just set for "admin" in Hamster.

Once all the data has been entered correctly, you can start your newsreader to get groups from Hamster. (Make sure Hamster is running). You should now see a list of newsgroups, containing at least the internal Hamster group internal.misc.

If you had previously set up your newsreader to read directly from a server, the list of newsgroups is reduced to those which are subscribed to in Hamster plus the internal groups. This might seem at first glance somewhat irritating, is however, technically correct. Hamster now acts as a new newsserver for the client, as such, it only provides those groups which are subscribed to in Hamster. If, for example, your ISP offers 100 groups, of which Hamster is subscribed to 50, then you will only be able to see these 50 groups in your newsreader.

Setup of E-mail-Readers

Analogous to the Newsreader the same access data need to be entered in your E-mail-Reader, 127/0/0/1 or localhost for the name of the mail server, "admin" for the username and the password assigned to this user. The assignment of both the username and the password is required only for the POP3 server. For the configuration of the SMTP-server the server name is sufficient.

As a first test you can send an email to the local user "admin@hamster", this should temporarily appear as a text file in "<hamster>/mails/mail.out" and then in the inbox of your mailreader the next time you try to receive mail.

The following addresses are all local addresses of the administrator

admin (i.e. without an "@" part)

admin@hamster

admin@localhost

admin@127.0.0.1

admin@[127.0.0.1]

admin@anything.invalid

All emails to these addresses are sent locally to the admin account.

Loading articles from Usenet

1. Select the menu-item "Configuration/News: server, groups, pulls". Select the tab "Newsserver" and click "Add", now enter the name of your newsserver. You will be presented with another page allowing you to further configure the newsserver. If it needs a password click "Edit" next to "Username / Password", now click "OK", you should now see a server listed in the menu, click "OK" again.

2. Open a connection to the internet so that Hamster can access the external news server. The chosen on-line connection must allow access to the newsserver, otherwise point 3 will not be able to function.

3. In the menu "On-line" select either "All servers (News+Mail)" or the specific newsserver under "NNTP-server/<servername>" Hamster will now load the list of all groups available on the server. This can take some time, especially if the group list is long or the connection is not very fast.

4. Wait until the number of "Tasks/Jobs" in the status-line at the bottom of the screen shows "0/0". This indicates that Hamster has finished loading the list of newsgroups, you can now terminate the on-line connection.

5. In the menu "Configuration/News: server, groups, pulls" select the tab "Newsserver" and then click on "Newspulls". Select the names of the groups you want to subscribe to, either by scrolling through the list, or by typing in the newsgroup name in the box in the top-right of the window. Once you have selected a newsgroup, click "Subscribe selected groups", it should now appear in the column on the left of the window. Once you have subscribed to all the groups you want, click "OK".

6. If you are no longer online, reconnect.

7. In the menu "Online" select "All servers (News+Mails)" Hamster will now load all articles from the subscribed newsgroups unless you have limited the number to be pulled.

8. Wait until the number of "Tasks/Jobs" in the statusline is zero, this may take several minutes depending on the speed of connection or number of articles to be pulled. Afterwards the on-line connection can be terminated again.

9. Start the Newsreader. You can now read and followup to articles and post new articles offline. The next time Hamster is run online to get new articles from the newsserver, it will post all previously written articles.

Getting E-mail from the net.

1. Select the menu-item "Configuration/Mail: settings & server", then click on the tab "POP3-Mailserver" to enter your POP3 server and "SMTP-Mailserver" to enter you SMTP server. If your pop and/or smtp servers need a password, enter this in the corresponding spaces. If you don't know what your pop3 or smtp servers are, ask your ISP.

2. Open an online connection so that Hamster can access the external mailservers. The chosen online connection must allow access to the mailserver, something which is, however, rarely a problem, at least whilst fetching mail.

3. In the menu "Online", select either "All servers (News+Mail)" or the relevant menu-item under "POP3-server" if you want to get E-Mails or "SMTP-server" if you want to send E-Mails. Hamster will now connect to the server and load/send all new E-mails, given that any exist. The E-Mails will then be sent to the configured local user, in the standard case, this is the user "admin".

4. Start the mailreader. The emails downloaded by Hamster can now be read, provided that everything is configured correctly.

Sending E-mails

1. You can write an e-mail from your mailreader and send it. Hamster should now show "Outbox: N/M=0/1" in the statusline at the bottom of the window.

2. Open an online connection so that Hamster can access the external mailservers. The chosen online connection must allow access to the mail server.

3. In the menu "Online" select either "All servers (News+Mail)" or the specific server under "SMTP-server". Hamster will now send all e-mails in its outbox to the server.

Source: C:\AA\Src20020607\EnHlp\html\hams9lf4.htm - (2)


Remote Control

Remote control of Hamster

Translated by Obbe-Jan Bakker

Remote control: general basics and installation

Syntax for the Remote Control server

Source: C:\AA\Src20020607\EnHlp\html\reco7els.htm - (3)


FAQ

Menu: Help / FAQ, List of frequently asked questions

Translated by Lawrence Mitchell

Security:

Hamster and safety
Hamster and SSL !GERMAN!
Hamster and secure passwords !GERMAN!
Excess of the user's limit
Why have my passwords suddenly stopped working?
Hamster and authentication !GERMAN!
Overview E-mail-clients for authentication procedure at the local servers

Installation/Configuration:

Conserving network resources
Install new Hamster versions (Update)
Can I use Hamster with a Router?
How can I load older articles in a newly subscribed group?
How do I setup Hamster to automatically send and retrieve mail and news at regular intervals?
Why can't the group internal.misc be deleted?
"Feeding" newsgroups with Hamster
Hamster and mail-distribution in company networks
Converting mailing-lists into newsgroups
Can I use two hamsters?
Accessing Hamster over a LAN
How I can access several accounts (mailboxes) with the same provider (ISP)?
Hamster and FQDN
Rerouting/Forwarding E-Mails
Start of the local xxxx-server failed
Hamster and Events

Operating together with other programs:

Hamster and Qutlook XP
Hamster and Qutlook Express
Hamster and anti-virus-programs
Error-message: Missing AUTH while sending e-mails
Hamster and Forte Agent
Hamster and large E-mail
Hamster and Netscape
Overview E-mail-clients for authentication procedure at the local servers
Hamster and IMAP-Clients

Tracking Errors:

How I can see what happens in Hamster?
How e-mails are routed with Hamster.
Hamster and regular expressions
Where can I get help if I'm stuck?

Source: C:\AA\Src20020607\EnHlp\html\faq18kw.htm - (4)


Links to Hamster-related sites and infos

Links to Hamster-related sites and infos

Translated by Heiko Studt

website	Description
http://www.tglsoft.de/ or http://home.arcor.de/tgl70/	Homepage of Hamster-Classic, by Thomas G. Liesner, Maintainer of Hamster.
	Also homepage of some add-on tools like KorrNews and CopyIf.
http://hamster.ist-super.de/ http://home.t-online.de/home/micha-wr/hamster/index.htm	Main Hamster info site and Script archive of Michael Gebert (site in German, parts in English).
http://www.elfden.co.uk/hamster/index.html	A basic translation of Michael Gebert's site (now out of date).
http://clients.net2000.com.au/~johnf/hamster2.htm	Basic Configuration Help
http://diverse.freepage.de/uwelehganwww/	"Old" German HamsterHelp by Uwe Lehmann, Jorg Behrend and Christian Fritz.
http://home.pages.de/~heikor/	Add-on programs and WSH-extensions of Heiko Rost (German).
http://hamster.arcornews.de/archive/index.htm	News Archive of the hamster.en.*, and copies of each version of Hamster are also available.
http://www.fortunecity.de/kraftwerk/prodigy/261/	"Wheel" of Wolfgang Krietsch (English) ("LaufRad" in German).
http://www.x501.de/hamster	Information about Hamster of Jürgen Denzler.
http://sites.inka.de/ximera/hamster-en.html	Information about Hamster and SSL by Martin Germann.
http://www.joernweber.de/	The latest info for the German helpfile for Hamster.
http://home.hetnet.nl/~ojb-hamster/index.html	The latest info for the English helpfile for Hamster.
http://home.clara.net/mgk/hamster/	English: scripts, links, Korrnews/CopyIf documentation.
http://www.goldpool.org/projekte/versionen.html	Hamster versions, Classic, Future, Playground, French, Chomik etc.
Hamster NewsGroups
http://www.nethamster.de/	Overview of hamsters usenet sub-hierarchies, that is hamster-related newsgroups and their rules and charters.
general newsgroups
news:hamster.admin	Administration & Groupcreation in the Hamster-hierarchy.
news:hamster.general	discussion of hamster in languages without a separate sub-hierarchy.
news:hamster.cancelreport	Reporting Spamcancels.
news:hamster.test	The only group in the hamster-hierarchie for test-posts.
English newsgroups
news:hamster.en.misc	Hamster-newsgroup for miscellaneous help.
news:hamster.en.scripts	Hamster-newsgroup for help with scripts and modules.
news:hamster.en.config	Hamster-newsgroup for help with the configuration.
German newsgroups
news:hamster.de.announce	Hamster-newsgroup announce in German.
news:hamster.de.config	Hamster-newsgroup for help with the configuration.
news:hamster.de.misc	Hamster-newsgroup for miscellaneous help.
news:hamster.de.newuser	Hamster-newsgroup for German newusers.
news:hamster.de.talk	Hamster-newsgroup for all kind of discussion.
news:hamster.de.tools	Hamster-newsgroup for additional tools / scripts etc.
French newsgroups
news:hamster.fr.admin	Hamster-newsgroup admin for french sub-hierarchie.
news:hamster.fr.annonces	Hamster-newsgroup announce in French.
news:hamster.fr.divers	Hamster-newsgroup miscellaneous in French.
news:hamster.fr.scripts	Hamster-newsgroup for scripts/modules in French.
Polish newsgroups
news:pl.news.czytniki	Hamster-newsgroup in Polish.
Hamster MailingLists
http://groups.yahoo.com/subscribe/ehamster/	Hamster's-mailing list (English)
http://groups.yahoo.com/subscribe/ehamsterhelp/	Hamster's-mailing list for updating the English helpfile (English)
http://groups.yahoo.com/subscribe/usehamsternet/	Hamster's-mailing list (German).
http://groups.yahoo.com/subscribe/fhamster/	Hamster's-mailing list (French).
http://www.elistas.net/foro/hamster/	Hamster's-mailing list (Spanish).
http://it.groups.yahoo.com/subscribe/ihamster/	Hamster's-mailing list (Italian).
http://groups.yahoo.com/subscribe/plhamster/	Hamster's-mailing list (Polish).
Other languages
French
http://hamster-fr.org/	Information and help to the hamster.
http://hamster-fr.sourceforge.net/	Information and help to the hamster.
Spanish/Catalan
http://perso.wanadoo.es/pedrojf/hamster.htm	Information and help to the hamster.
http://hamster.es.free.fr/	FAQ and languagefiles in French, Spanish and Catalan.
Italian
http://digilander.iol.it/alexseb/hamster/	Information and help to the hamster.
http://www.geocities.com/FashionAvenue/1075/	Information and help to the hamster.
http://vene.dave.it/news/hamster1.asp	FAQ for the hamster.
Polish
http://strony.wp.pl/wp/kostoo/	Information and help to the hamster.
http://www.polski-hamster.prv.pl/	Information and help to the hamster.(Chomik)
http://www.republika.pl/aptu/	Information and help to the hamster.
Danish
http://hjem.get2net.dk/henrik-k-hansen/Hamstersiden.html	Information and help to the hamster.
http://www.kajsvenningsen.dk/opsat/ham-01.shtml	Information and help to the hamster.
Japanese
http://members.tripod.co.jp/kobayashieiji/	Information and help to the hamster.
Source: C:\AA\Src20020607\EnHlp\html\hams02ls.htm - (5)


Release Notes

Release Notes

Translated by Lawrence Mitchell, corrected by Shehu Dikko, updated by OJB

Starting with version 2.0 the SSL - part from Martin Germann is integrated into the Hamster code. This means that from this version the additional program sTunnel is no longer necessary. The new SSL-support (scripts) is incompatible to older Hamster-versions (since beta-version 1.3.23.140). Because of these changes the syntax of several hs2 commands has changed. For details see the file SSLUpdate.txt!

The old-style script version hs1 is no longer supported (since beta-version 1.3.23.110).

Starting with version 1.3.23 hs1 scripts that do not start with the declaration #!hs1 cause an error-message. If HamWaitIdle is called without parameters, it delays for at least 100 ms and 5 loops before checking the idle status. In using parameters, this value can be reduced to 50ms. For parameter values under 50 ms, a forced timeout of 100 ms is set. This default is necessary so that slowly starting asynchronous commands carried out immediately before HamWaitIdle are definitely recognized as active by HamWaitIdle.

With the update of a Beta version (Future - Hamster), the FQDN might need to be changed. Hamster's own FQDN is now used for a few additional headers and info-mails internal to Hamster.

If in a previous version a username in the form of an e-mail address was used, it is recommended that this is changed to a mailbox name conforming to RFC2822.

The following symbols are allowed in a username:

[ '!', '#', '$', '&', '"', '+', '-', '_', '0'..'9', '=', '.', 'A'..'Z, 'a'..'z' ]

For more security the binding of local servers in Hamster to IP-Addresses were changed. Now the default value is 127.0.0.1 against 0.0.0.0 in old versions.

If necessary these settings can be changed in menu ” local servers ” -> ”IP-Access”.

Starting with version 1.3.20 the source code of Hamster is freely available (Open Source).

Starting with version 1.3.19 Hamster's internal groups "hamster.misc", "hamster.posted" and "hamster.errors" were replaced with the common group "internal.misc" as a standard target for internal messages. This measure had become necessary because of the establishment of a "Hamster"-Top-Level-hierarchy in Usenet. To move this again if necessary, one can either change the following in hamster.ini:

  Internalgroup.default=hamster.misc
  internalgroup.postok=hamster.posted
  internalgroup.posterrors=hamster.errors

Or use the menu-item "Configuration/General settings/Internal Groups".

Starting with version 1.3.5 a new format for the History-file is used. A conversion of the old format takes place automatically at the start of a new version of Hamster. After this, it is not possible to change back to a previous version.

Starting with version 1.3.3 it is no longer possible to log onto the local POP3 and NNTP server without a password. If changing from a previous version of Hamster, the user "admin" must be given a password. The news- mailreaders must then be configured to use this password.

Source: C:\AA\Src20020607\EnHlp\html\hams02gg.htm - (6)


Rebuild global lists

Menu: file / Rebuild global lists

Translated by Obbe-Jan Bakker

List of all newsgroup-descriptions (.\Server\alldescs.txt)

This list contains the descriptions of all groups on all available newsservers and is built from the description-lists of all newsservers.

When adding a new "News-Pull", the description of the new group is loaded from this list.

Warning: during this action the hamster should not otherwise be used as far as possible,

because a crash during the rebuild will likely cause serious damage to the processed files.

Source: C:\AA\Src20020607\EnHlp\html\menu34j4.htm - (7)


Purge all groups

Menu: file / purge all groups

Translated by Obbe-Jan Bakker

With this function, old articles, history-entries and entries in the killfile-log will be deleted and the corresponding files will be compacted.

The duration in days for keeping data can be defined under "Menu: Configuration / Local servers / Newsserver(NNTP)".

In this context days means "days since article was received", NOT "days since article was posted".

Warning: during this action the hamster should not otherwise be used as far as possible,

because a crash during purge will likely cause serious damage to the files processed at that moment.

Source: C:\AA\Src20020607\EnHlp\html\menu37ow.htm - (8)


Rebuild news history

Menu: file / rebuild history

Translated by Obbe-Jan Bakker

When selecting this menu-item, the history-file (".\Groups\Hist*.dat") is re-created.

The history contains the Message-ID's of all articles stored in Hamster and prevents loading the same article more than once.

Normally, there should be no need to start this menu-item, as history-entries are added and deleted automatically.

If you have any problems with articles getting loaded multiple times or disappearing articles (damaged group data), you might try this function.

If one has prescribed a low duration time (a few days for all groups),i.e. lower than the servers retention time, it is possible with a newly rebuild history that some articles can be loaded twice. This is because the first article (and its message-ID) was already expired in the local group file but still available on some server.

Attention: This may take a long time depending on the number of groups and articles to process.

Source: C:\AA\Src20020607\EnHlp\html\menu3auo.htm - (9)


Clear counters & log

Menu: file / Clear counters & log

Translated by Heiko Studt

The submenu allows, alternatively, only to empty the protocol-window (with warnings and errors), or, to reset the status line (number of received mails, postings/articles, bytes), or, both at once.

These functions can also be called by (Hamster) scripts. See the corresponding help sections for more info.

Source: C:\AA\Src20020607\EnHlp\html\menu3e0g.htm - (10)


Refresh menu items

Menu: file / Refresh menu items

Translated by Obbe-Jan Bakker

Refreshes the different dynamically produced menus.

These are the menus "Online" and "Script", with respectively user-defined server-menus and available scripts.

If, e.g., a new script was placed in the corresponding folder, this menu function calls the hamsters script detection again, so that the new script can also be called and edited with the corresponding menu items.

Source: C:\AA\Src20020607\EnHlp\html\menu3h68.htm - (11)


Exit

Menu: file / Exit

Translated by Obbe-Jan Bakker

Quit Hamster.

This menu stops Hamster entirely and removes the Hamster-icon from the system-tray. This functions independently of the configuration-setting for how Hamster will react to Close window.

Source: C:\AA\Src20020607\EnHlp\html\menuexit.htm - (12)


Visual

Menu: Configuration / General Settings / Visual

Translated by Lawrence Mitchell

Language select:

Here one can select a preferred language. If other translations should become available, they can be added by copying the new language file into Hamster's root directory - the new language should then be available as a choice in the dialogue box. A language-file has a filename in the format Hamster_XX.dat. In this name the XX must be replaced by a land-code, for example "de" or "en".

Start as icon in system tray

This option determines whether Hamster should start up minimized as an icon in the system tray or if the main window should be opened.

Splash screen when starting

If this option is active, an indication window is shown while Hamster is starting.

Minimize on close

If this option is active, Hamster will not shut down when the main window is closed, but will still be available as an icon in the system tray. (double)Click the icon and the hamster main window will re-appear.

Ask on close, if outbox is not empty

If this option is active, Hamster will indicate on closing that there are unsent messages (mail and/or news) if there are any waiting in resp "mail.out", "news.out".

Main window hs2 shell for direct input:

Here you can activate an additional input line for hs2-commands in the main window. This allows the direct entry of hs2-command in the Hamster main windows. These are a sort of 'mini-scripts'. If there is a script-module with the special name "hs2shell.hsm" created this module is automatically available to these 'mini-scripts' The "hs2shell.hsm" can be defined/edited in the third tab of tab "General" in "Manage Scripts and Modules...".

Visible menu items

Here you can determine which menus from Hamster are accessible (default all).

Note! Some menu items are also inaccessible when 'Advanced Configuration' is disabled. In this case enable 'Advanced Configuration' to re-activate these menu items.

If you hide the Configuration menu you can not undo this from within Hamster. You will then have to edit the Hamster.ini manually ([Setup] HideMenuItems.*) and restart Hamster to regain access to the configuration menu from within Hamster.

View Log in main window: Max. lines to view:

This option sets how many lines the logfile may contain before Hamster starts deleting old lines to make space for new ones. 500 lines ought to be enough in most cases.

View Log in main window: Log for these entries:

Here you can select what type of messages are written to the "Log" screen in Hamster's main window. The different colours of each type are the same as the colours used for these types in the logwindow of Hamster.

Note: Restricting what messages are written to the main window will also decrease the amount of information shown in sub-windows, ("Pulls", "Log-Thread", "error/warnings") as these are dependent on what is written to the main Log screen, not what is written to the logfile on disk.

View Log in main window: Log for these entries: Refresh Logs after:

Here you can set the frequency with which the logging messages are updated on the screen. If you find that you screen seems to be flickering, change this to a higher setting to avoid this. This setting is dependent on the processing capability of your computer.

View Log in main window: Activate Tab "Warnings & Errors" after first Warning/Error

Here you can set if the log-window "Warnings & Errors" should be shown all the time, or only when it is needed.

Source: C:\AA\Src20020607\EnHlp\html\menu8hbk.htm - (13)


Logfiles

Menu: Configuration / General Settings / Logfiles

Translated by Obbe-Jan Bakker

Main-log

Session-logfiles to keep:

Each time Hamster is started, a new logfile is created (".\Logs\0.log") in "./Logs/" and the previous logfiles are renamed to number plus 1. This option sets how many logfiles should be kept.

Log for these entries:

Here you can select what type of messages are written to the logfile. The different colours of each type are the same as the colours used for these types in the logwindow of Hamster. There will be no colours in the saved logfile itself.

Caution is recommended when using the "[X] Debug" option as large amounts of data will be written to your harddisk. The number of messages written to disk doubles at the very least.

Open log-file:

Here you can open the four most recent logfiles with the editor set on the tab: Misc.

Additional logs:

Here you can set a limit to the number of lines in the other logfiles (mail/news/RAS-dial). When set to zero (the default) there is no limit.

With the buttons [Open] these logfiles can be opened/viewed with the editor set on the tab: Misc.

Source: C:\AA\Src20020607\EnHlp\html\menu8hkg.htm - (14)


Online-Menu

Menu: Configuration / General Settings/ Online-Menu

Translated by Lawrence Mitchell

Menu entry:

In this menu you can define up to 9 new entries for the "Online" Menu available from Hamster's main window. Each entry defines either a single server, a list of servers, or a dividing line. Any external News, POP3, or SMTP-servers can be used. In the case of newsservers, the posting of articles to the server and pulling articles from the server are considered to be one.

If no entry is selected, the further fields are not available.

Additional switches:

[Up] moves the selected entry up by one in the entry list. i.e. the selected entry and the entry immediately above change places.

[Down] moves the selected entry down by one in the entry list. i.e. the selected entry and the entry immediately below change places.

[Separator] makes the currently selected menu-item appear as a separating bar "-", the menu-item is then deactivated, but it allows the division of the menu for easier readability.

[Delete] erases the currently selected menu-item so that it no longer appears in the online menu and can be assigned a different function.

Title:

This is the text that will show up in the Online menu. A separator is indicated by a single "-", if there is no name, it indicates that the current menu-item is unused. If neither of the above are the case, a box appears, allowing one to chose the wished for servers.

Available / Selected servers:

Here one can select one or more of the available servers to be added to this menu-item. On the right are the currently selected servers, on the left the currently available servers. To move the servers from one side to the other, either double-click on them, or use on of the two buttons [-->] or [<--].

Once you have configured this menu to your liking, you can use the relevant menu-item from the main Hamster window in the "Online" menu to pull/post news, receive or send mails, or whatever you configured it to do.

Source: C:\AA\Src20020607\EnHlp\html\menu8khc.htm - (15)


Internal groups

Menu: Configuration / General Settings / Internal Groups

Translated by Lawrence Mitchell

Here you can allocate to which internal groups Hamster should send its messages (e.g messages about new groups). To be able to assign different local groups to each item, you first need to set up additional groups through the menu-item "Configuration / News: server, groups, pulls".

Internal messages can be one of the following types:

-	Report articles which were posted successfully: i.e. All posts which were accepted by the external news server.
-	Report articles which failed on posting: these posts were rejected by the external newsserver, the error-message returned by the server is added to the beginning of the message text by Hamster.
-	Daily group statistics: these consist of "[Hamster]-Info" posts, which list the currently subscribed groups twice (sorted alphabetically and by number of articles). These posts also list the 'unused' groups.
-	Notifications of cancels in local groups: if an article in a local group is cancelled, the confirmation of this cancel is sent to the selected group.
-	Report new newsgroups: New groups are posted (inc. a group description) sorted by newsserver.
-	Container for articles with unknown groups: any posts which you request but were not posted to a currently subscribed group end up here. An example would be if you request a message by message-id which was only posted to unsubscribed groups.
-	Report pull errors (e.g. outdated groups): if an error occurs whilst pulling news from an external server, any error messages will be sent here. In the majority of cases, such an error message means that the relevant group has been removed from the external server.

If you have just installed Hamster for the first time, all messages will be sent to the group "internal.misc".

This setting can be changed in menu ”Configuration, Settings, Internal Groups”.

With the button “ create new local group“ a new internal hamster group can be created, which task then directly one can be assigned.

Source: C:\AA\Src20020607\EnHlp\html\menu8nn4.htm - (16)


SSL

Menu: Configuration / General settings... / SSL

Translated by Obbe-Jan Bakker

Basic settings:

Attention! The use of SSL in connection with Hamster requires additional tools.

These can be found at:

http://sites.inka.de/ximera/openssl_dlls.zip

See also the SSL-FAQ!

Key pair(required for local server):

Here optionally the file can be specified with the private X509-key pair in PEM - format, with which the local servers authentify themselves to the client.

Password for private key:

Here the password belonging to to the private X509-key pair must be specified.

Path with certificates for verification:

Here the Path is to be specified to the directory, in which the locally available X509-certificates for authentication to the remote server (server of the Provider) can be found.

File with certificates for verification:

Here the file is to be specified, in which the locally available certificates for verification of the remote server (server of the Provider) are located. This option can be used as an alternative for the previous option "Path with certificates for verification".

 Encryption:

Here can be selected, which encryption level the hamster may accept. For symmetrical encryption, an encryption level of least 128 bits is recommended. The key-lengths 56 bit and 64 bit do no longer correspond with the current state of encryption technology and can be attacked, broken.

 Protocols:

Here can be specified, which handshake-protocols may be used. Considered as reliable are at the moment SSL version 3 and TLS version 1. TLS is the protocol preferred by the IETF.

 External random seed file for PRNG:

Here an external file with random values for the initialization of the random number generator can be specified. Specifying an external source to initialize the random generator is only necessary if a source is available, which is better than that of the OpenSSL-files.

More information on this is available at the OpenSSL-homepage at http://www.openssl.org

 Advanced SSL settings:

Here further security-related settings can be made. There are settings for the Encryption algorithms (RC2, DES, RC4, Triple DES, IDEA), the Message Digest (MD5, SHA-1) and compatibility settings. These should only be changed if one exactly knows what these changes involve.

More information on this is available at the OpenSSL - homepage at http://www.openssl.org

Source: C:\AA\Src20020607\EnHlp\html\menu8nsg.htm - (17)


Misc.

Menu: Configuration / General Settings / Misc.

Translated by Lawrence Mitchell

Register extension hsc, so scripts can be started by doubleclick:

Here you can register the hamster script extension to the operating system, so after that a doubleclick on a scriptfile name the hamster becomes activated and automatically carries out the Script.

Editor for running text files:

Here you can define what program you want to use for editing Hamster files such as scripts and configuration files. The first field should contain the name of the program (=name of the .exe file, possibly inc. the full path if it does not lie in your $PATH (to find your path, run a command prompt and type "echo %path%")). The second field should contain the commands/parameters you want to pass to the program when it starts. This field should contain "%1" at the very least, otherwise the relevant file-name is not passed as an argument.

Default timeout for all external servers (in seconds)

Here you can set a timeout limit in seconds for all connections to external servers and for the processing of commands by these servers. Settings for each individual server in their respective configuration boxes take precedence over this setting.

In diesen Felder kann ein Timeout in Sekunden für alle Verbindungen zu externen Servern und für die Abarbeitung der Kommandos, durch diese externen Server, eingestellt werden. Die Einstellungen für einzelne Server, in deren Konfigurationsdialog, haben Vorrang vor diesen Einstellungen.

Taskdelimiter

Here you can set the maximum number of parallel tasks Hamster is allowed to perform to limit the load Hamster puts on the system and/or internet connection.

Source: C:\AA\Src20020607\EnHlp\html\menu8nw0.htm - (18)


Local Accounts

Menu: Configuration / Accounts & Passwords / Local Accounts

Translated by Lawrence Mitchell

It is here that you can configure users for local accounts.

Users may be subdivided into a number of different groups.

To add a new user to a particular group, select the relevant group and then click the button [Add user]

This user receives default permissions which are set at a group level, eg what newsgroups they are allowed to read, whether they have a pop account, etc...

Warning: Mailbox (user) names should only contain letters and numbers, and certainly no spaces or special characters. The characters allowed are specified in RFCs 2821/2822, they are:

['!', '#', '$', '&', '"', '+', '-', '_', '[0-9]', '=', '.', '[A-Z]', '[a-z]']

To add a new usergroup, select the button [Add group].

Clicking on [Edit] brings up a configuration dialog for the selected user/group.

The button [Delete] allows the deleting of either a user or a group. When deleting a group, you are given the option of either deleting all its users, or moving them into the "Admin" group.

These functions are also available by context menu.

The checkbox Auto Full Expand near the top of the window sets whether you want all user groups to be shown fully opened when opening this window, or if you only want to see the user groups (not the individual users)

EditHamster Account - Editing an individual user

Username and password are used for both the NNTP and the POP3 servers. The username is only ever entered once, when first setting up the account, the password can be set or changed at any time using the button [Change].

Local NNTP-Server: Settings for News

With the setting Newsgroups the user can read (regex-list), you can specify which newsgroups the user may read but not post to. Equivalently, you can specify which newsgroups the user may also post to with the setting Newsgroups the user may post to (regex-list). For the format of both these fields see the section group selection. In addition, you can specify if the user can feed Hamster using the NNTP-peering protocol and if the NewNews command of the local NNTP-Server may be used.

Local POP3-Server: Settings for Mail

Through the setting User has a local POP3-mailbox, you can specify if the user may receive e-mails through Hamster.

The field Local email-addresses allows you to set local e-mail addresses for this user (e.g. for a local network). All e-mails sent to one of these addresses will be sent through the local SMTP-server directly to the recipient, without sending them through the external SMTP-server. If a user has multiple e-mail addresses, these must be entered as a space-separated list, e.g. "john.doe jd john.doe@domain1.com john.doe@domain2.com".

Local SMTP-Server: Settings for sending mail

If Hamster's local SMTP-server is configured for "SMTP after POP3", the setting "User may send mail" specifies if the user is allowed to send emails, if checked, the user is allowed. If the SMTP server is not configured for SMTP after POP3, this setting has no effect.

Local Remote Control Server:

Here can be set if the user may remotely control the Hamster per Telnet.

Group Selection

The group selection is a list of regular expressions which are also used in other places in Hamster (e.g. in the filter rules). To use multiple expressions, you need to separate them with spaces. A few examples follow:

Examples:

Regex:          .*
Result:         All groups allowed

Regex:          !.*
Result:         No groups allowed

Regex:          !^internal\..*
Result:         All groups, apart from those beginning with
                "internal", i.e. local groups, are allowed

Regex:          ^news\. !^internal\.posted ^internal\.
Result:         All "news." groups are allowed, as are all internal
                groups, except for internal.posted

"Special" user: nntpdefault

If you want to allow access to the local NNTP-server without having to give every user their own account, you can set up a "special" account, "nntpdefault" and give it the password "*". Once this is done, newsclients can connect to the server without setting a username/password.

Group

Here, you can select which usergroup the user should belong to, this option is not available for the user "admin" as it must belong to the "Admin" usergroup.

Edit Hamster-Account-Group - editing a group

Groups name only available in the dialog when adding a new group, this is the name of the group.

Description allows you to write a short description of the group

Default-Settings for new built members allows you to give the default settings for a user created in this group.

Source: C:\AA\Src20020607\EnHlp\html\menu43lc.htm - (19)


Aliases for accounts

Menu: Configuration / Accounts & passwords... / Aliases for accounts

Translated by Obbe-Jan Bakker

Here you can assign alias names to local users. The data contained here are stored in the file Malias.hst. Be aware however that an alias name has priority over local user name. And furthermore the mailfilter-file has priority over the alias name.

Incoming email from the POP3-client can only be redirected to user names predefined in the Mailfilter.

See also the FAQ : forwarding emails

The variable %FQDN% can be used as a placeholder for the Hamster FQDN.

All entries must have the format Source=Target.

The name or the E-mail address before the equality sign is always the E-Mail address that will be rerouted. After the equality sign stands always the destination E-Mail address. Comments can be added starting with the lozenge or semicolon ( # ; ).

Source: C:\AA\Src20020607\EnHlp\html\menu43u8.htm - (20)


Passwords

Menu: Configuration / Accounts & passwords... / Passwords

Translated by Obbe-Jan Bakker

Usernames and passwords for RAS-connections and scripts:

Here you can set the usernames and passwords for your RAS-dialups and scripts. The settings for the RAS-connections are only needed, if Hamster should be able to dial by itself. See also menu On-line / Ras-dialing and the script command HamRasDial.

The additional password settings named "$1", "$2", ... are "general-purpose"-passwords, which can be used in some script-commands.

Instead of noting usernames and passwords in clear-text in the scripts, one of these settings can be used by using "$number" for the username and leaving the password field empty.

The maximum number of available password-placeholders for scripts is adjustable in the field "Max.Skript PW". The default value is 30 passwords.

The password fields can have three different states.

They are displayed as:

- "{ASK}"    Hamster will ask you for username and/or password when needed.

- "{SET}"    Username and/or password is set and stored in "Password.!!!" (see notes below).

- "{NONE}"   Username/password is empty, i.e. not needed (e.g. authentication by IP-number).

To edit the settings of an item, select it in the list and press [Edit].

To clear username and password (i.e. set both to "{NONE}"), select the according item in the list and press [Clear].

The listbox "Encryption base" defines the computer-specific parameters for the encoding/encryption of all the usernames/passwords in Hamster.

Default is windows username and system info.

Changing this setting to a lower level makes it easier for others to steal your passwords!

Attention!, changing this setting means that all password must be re-entered - incl. the password for all servers.

The same might happen if you upgrade or replace your computer.

Important notes concerning passwords:

The password-settings will be saved in the file "Password.!!!". Do NOT send this file to me or anybody else, even if you have login- or similar problems!

The entries in "Password.!!!" are coded with the "Blowfish" algorithm. The key used to code the data (see listbox setting above) is a combination of fixed items and different OS-settings (PC-Name, OS-version etc.) and Windows login name.

The stored and coded data consists of username and password, and it is indexed by a hash-value for the according server-/RAS-name (i.e. this name is not stored in plain-text, but in a form, to find the entry again when needed).

If this all sounds "safe", be aware, that it is NOT really!

Even if the key depends on the PC where it was generated, the items used are in fact "guessable"!

But hey, other programs use plain text or XOR or ROT13 to store such things ... ;-)

Source: C:\AA\Src20020607\EnHlp\html\menu46r4.htm - (21)


General (local domains)

Menu: Configuration / Local server... / General (local domains)

Translated by Obbe-Jan Bakker

FQDN for Message-IDs:

Here you can enter the FQDN for the "domain part" ( also everything after the "@") of the Message-ID, if the MID is set to be generated by Hamster. You can not invent a FQDN yourself, but rather one needs either an own domain or must get a subdomain of a provider or another domain-owner. You can get a cost-free domain name at for example http://www.th-h.de/fqdn (German) or at a dns provider for example http://www.dyndns.org/.

FQDN for special headers, peering etc:

Here you can enter the FQDN to be used for the Path: and Received: headers, if these headers are set to be generated by Hamster. This entry will than also be used for the Greeting-text of Hamster.

Encrypt Message-ID, if generated:

Here you can determine whether the Message-ID generated by the hamster is to become cryptographically secured. This prevented, the recognition of the building rule of the Message-ID and therefore protects against bogey-cancels through the building rule of the Message ID.

Message-ID-FQDN is local domain:

Here you can determine whether the FQDN for the Message-ID should be treated as local mailaddress with the distribution of the incoming mail received at the local SMTP-server.

Local mail-delivery, if domain-part of recipient matches this regexp:

Here you can enter the "domain part" for the local E-Mail addresses. Addresses with this "domain part" are regarded as local E-Mail addresses and are not sent to the E-Mail server of the Provider.

The “local part” (that is everything before the "@") of these addresses must refer to a valid local e-mail-address, which has been entered in the user data of the individual users. E-mails to local addresses will be delivered directly, entirely bypassing the provider. If there exists no local e-mail address for the "domain-part" entered here, then the e-mail will be sent to the Administrator. The "domain part" is to be entered in the form of a regular expression (Regex).

The pre-set default is:

.*hamster|\[?127\.0\.0\.1\]?|.*invalid

Examples for real addresses, which suffice these conditions:

.*hamster            somewhere@somewhat.hamster
\[?127\.0\.0\.1\]?   somewhere@127.0.0.1, somewhat@[127.0.0.1]
.*invalid            somewhere@nospam.invalid

Note:

E-Mail addresses without "domain part" are always regarded as local E-Mail addresses by Hamster.

Envelope-From: Address for automatically generated e-mail:

Here you can determine with which e-mail address, as sender, error messages of Hamster are to be sent. Furthermore this value of this field is used for the News To Mail Gateway and the external forwarding of e-mail.

Consider they please that, this field should contain a valid public E-Mail address, if the News To Mails Gateway or the external forwarding of mails is to be used.

Send info-mail only to local accounts:

Here you can set that error message will not to be sent to the sender of an e-mail, but exclusively to the administrator. If this menu option is deactivated, the input of a return address for these messages is necessary.

IPAccess.hst:

Here the file IPAccess.hst can be edited for the access control of the local servers.

Source: C:\AA\Src20020607\EnHlp\html\menu49ww.htm - (22)


Edit IP-Access

Menu: Configuration / Local server... / tab: general / button: IP-Access

Translated by Obbe-Jan Bakker

Note! These settings are security-related. Only make changes if you know exactly how this affects your pc security.

See also the FAQ: "Hamster and security".

Edit IP-Access.hst define (additional) access rules:

The Hamster contains a filter for IP-addresses which allows/prohibits access from IP-packets with a certain IP-address. The individual lines of this file can be edited with the buttons on the right after first being selected. There are three different types of entries:

1. Comments

Here you can enter a self-defined comment.

2. Server access

Here you can specify which server and with which access rights can be used from which IP-address. For server the entries NNTP, SMTP, POP3, IMAP, RECO, MAIL and ALL are allowed. The entry MAIL means both the local POP3 and SMTP server together. The entry All means all local servers.

As access rights the following entries are possible:

NA : No access
All: No restrictions
RO : Read only
WO : Write only
RW : Read and write

As third parameters a single IP address or a IP address range is expected.

3. Special handling of the local IP-addresses

Because a computer can have several network interfaces and therefore several IP-addresses, they can specify which of these IP-addresses in the computer will be decisive for the handling of all local IP-addresses. The default value is the IP-address 127.0.0.1 (localhost).

Source: C:\AA\Src20020607\EnHlp\html\menu4gds.htm - (23)


News NNTP

Menu: Configuration / local server... / NNTP

Translated by Obbe-Jan Bakker

Bind to IP address:

Here can be determined to which network interface the local server is to be bound.

The standard-setting is 127.0.0.1. This pre-set value protects reliably against intruders.

Before changing this setting you should be well-informed about the functioning of the TCP/IP-stack and related security problems.

Port:

The "Port"-number determines the access port of the server i.e. under which TCP/IP-Port the client can access the local NNTP-News-Server. Standard is port 119.

Special user "nntpdefault":

To allow access to the local NNTP-Server without authentication a special user "nntpdefault" with password “*” must be created. This special user permits easier access from newsreader programs. Then it is sufficient to enter in the news client program only the name of the newsserver.

SSL-Usage:

Here can be adjusted whether for the local server SSL/TLS is to be used.

Maximum count of parallel client connections:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and the reader program. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum count of parallel client connections to a single IP:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and a client. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum size for outgoing news:

Here you can limit the size of outgoing news-postings. Default maximum is two MegaByte (and thousand lines). Postings will be rejected by the server if the size exceeds one of these these maxima (size in bytes or lines). With value "0" outgoing news will not be size-checked by the local server.

Maximum number of lines can be set in "Hamster.ini" under section [setup] item 'local.limit.linelen.nntp='.

Purge settings:

Days to keep data (used for purge, 0=forever):
Articles __7__ History __7__ Killfile-Log __7__

These settings determine Hamsters 'memory', that is the time information once stored in the Hamster datafiles will remain available in Hamster. This can be indefinitely, or limited by these settings to a certain number of days. There are three separate settings for resp. old articles, history-entries (Message-ID in group) and kill-file-logged articles (Message-ID and headers).

tab: Add Header

Generate Message-ID, if no Message-ID is set:

If this field is checked, Hamster itself will generate the Message-ID, if there was no message-id set by the news-reader program. The “local part” of the Message-ID (that is everything before "@") will be generated from the current time, the task-number and a sequential counter per time unit. With an also non-ambiguous FQDN this creates together an address, fulfilling the technical requirements for a Message-ID (that is for at least two years unambiguous).

Generate or expand "User-Agent"-Header:

If this field is checked, Hamster will supplement its version number in the User-Agent-Header of each sent article.

Generate or expand "Path"-Header:

If this field is checked, Hamster supplements the domain name in the header of each sent article. To achieve this the local domain must have been set in menu "Configuration / Local Server / General". Otherwise the local NNTP-Server will reject all posted articles, because otherwise defective articles would be produced.

tab: Additonal Options

Allow POST with unknown groups:

Here you can allow the local users to post to unknown groups. Unknown groups are all groups for which no newspull from a remote server is defined.

Normally Crosspostings, to at least one newsgroup unknown to Hamster are automatically rejected. If this field is checked, the posting to unknown groups will be allowed (limits see below). However, this does not guarantee that the external newsserver will accept the article.

Even if checked the following restrictions do still apply:

- At least one of the groups posted to must exist in Hamster.

- Crosspost to maximally two unknown groups if no "Followup-To"-Header is set.

- Crosspost to maximally five unknown groups if a "Followup-To"-Header is set.

Add unknown Message-IDs to the "GetMids.txt"-files:

If this field is checked, Hamster will respond to requests for unknown articles (unknown Message-IDs) with adding these Message-IDs to the file "Getmids.txt" for all servers. Then, in the next on-line session when pulling news, the article will be loaded (if still available on any of the servers). If the group in which the article was posted is not available in Hamster the article will be saved in the internal group set in Menu "Configuration / tab: Internal Groups", default "internal.misc".

Post new articles directly into local database (Local Injection) (Use with care! For details see help)

If this field is checked, Hamster will copy every locally posted article without delay local into the appropriate local group(s) which bypasses the detour over the provider. This function is only recommended if Hamster is being used as a news Feeder, or if immediate local availability of the article is very time-critical and absolutely necessary.

Attention:

This function should not be used if outgoing articles are preprocessed with additional tools like Korrnews or scripts, before being sent to an external server. This setting combined with additional preprocessing can cause different versions of the same articles to appear in the local (Hamster-)database and in Usenet (the external servers).

For this function are the generating of Message-ID:-headers, Path:-header and a Domain-name absolutely required. The Domain-name (FQDN) must be set in Menu "Configuration / Local server... / tab:General". Otherwise the local NNTP-server will reject all attempts to post articles because these article are defective.

tab: Cancel-messages

Execute in subscribed groups  X Control Cancel <..> X SuperSedes <..>
  X Cancel only if author of cancel and cancelled message is equal.
  X Allow cancel of messages with control-header.

These checkboxes determine whether Control messages are applied to or ignored by the local Hamster database. There are separate settings for Supersedes (replace) and Cancel (remove) messages.

Source: C:\AA\Src20020607\EnHlp\html\menu4d2o.htm - (24)


Mail POP3

Menu: Configuration / local server... / POP3

Translated by Obbe-Jan Bakker

Local mail server (POP3) for receiving mail

Bind to IP address:

Here can be determined to which network interface the local server is to be bound.

The standard-setting is 127.0.0.1. This pre-set value protects reliably against intruders.

Before changing this setting you should be well-informed about the functioning of the TCP/IP-stack and related security problems.

Port:

The "Port"-number determines the access port of the server i.e. under which TCP/IP-Port the client can access the local POP3-Server. Standard is port 110.

SSL-Usage:

Here can be adjusted whether for the local server SSL/TLS is to be used.

Maximum count of parallel client connections:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and the reader program. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum count of parallel client connections to a single IP:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and a client. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum size for incoming mail:

Here you can limit the size of incoming e-mail. Default maximum is two MegaByte. This setting applies only to the local mailserver. Similar settings for incoming e-mail from external mailservers can be set under "Configuration / Mail: settings & server... / tab: POP3-Settings" and can also be fine-tuned with additional rules in the mail-score/kill-file "MailFilt.hst" in menu "Configuration / Edit special files / Edit Mail-Score-File".

Maximum number of lines can be set in "Hamster.ini" under section [setup] item 'local.limit.linelen.pop3='.

Authentication methods:

Here can be set which SASL (authentication) - methods are allowed at the local POP3-mail-server. Default: all methods are allowed.

Note however that the SASL - methods PLAIN and EXTERNAL can only be used in combination with SSL.

Attention: the authentication procedure LOGIN only masks the passwords. If possible use CRAM-MD5 or CRAM-SHA1 and/or SSL instead.

Purge settings:

Days to keep data (used for purge, 0 = forever)
Mail-History:

This setting determines if mail-messages are kept forever or expire after the specified number of days. To disable the purge of e-mail set this value to zero.

Source: C:\AA\Src20020607\EnHlp\html\menu4g8g.htm - (25)


Mail IMAP

Menu: Configuration / local server... / IMAP

Translated by Obbe-Jan Bakker

Local mail server (IMAP) for receiving mail with advanced features

Bind to IP address:

Here can be determined to which network interface the local server is to be bound.

The standard-setting is 127.0.0.1. This pre-set value protects reliably against intruders.

Before changing this setting you should be well-informed about the functioning of the TCP/IP-stack and related security problems.

Port:

The "Port"-number determines the access port of the server i.e. under which TCP/IP-Port the client can access the local IMAP-Server. Standard is port 143.

SSL-Usage:

Here can be adjusted whether for the local server SSL/TLS is to be used.

Maximum count of parallel client connections:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and the reader program. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum count of parallel client connections to a single IP:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and a client. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum size for incoming mail:

Here you can limit the size of incoming e-mail. Default maximum is two MegaByte. This setting applies only to the local mailserver. Similar settings for incoming e-mail from external mailservers can be set under "Configuration / Mail: settings & server... / tab: POP3-Settings" and can also be fine-tuned with additional rules in the mail-score/kill-file "MailFilt.hst" in menu "Configuration / Edit special files / Edit Mail-Score-File".

Maximum number of lines can be set in "Hamster.ini" under section [setup] item 'local.limit.linelen.pop3='.

Source: C:\AA\Src20020607\EnHlp\html\menu4svk.htm - (26)


Mail SMTP

Menu: Configuration / local server... / SMTP

Translated by Obbe-Jan Bakker

Local mail server (SMTP) for sending mail

Bind to IP address:

Here can be determined to which network interface the local server is to be bound.

The standard-setting is 127.0.0.1. This pre-set value protects reliably against intruders.

Before changing this setting you should be well-informed about the functioning of the TCP/IP-stack and related security problems.

Port:

The "Port"-number determines the access port of the server i.e. under which TCP/IP-Port the client can access the local SMTP-Server. Standard is port 25.

SSL-Usage:

Here can be adjusted whether for the local server SSL/TLS is to be used.

Maximum count of parallel client connections:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and the reader program. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum count of parallel client connections to a single IP:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and a client. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Authentication / SMTP AUTH:

This setting activates the "SMTP Authentication"-procedure for the local server. It can only be used if it is actually supported by the server, otherwise login will fail with an errormessage.

Authentication / Accept mails to local users, also without authentication:

If SMTP-AUTH is set, this additional setting determines if local mail is excluded from the authentication. With this setting you can send e-mail without authentication exclusively to local users, even if SMTP-AUTH is required. This method is recommended if Hamster is used as a SMTP-MX-server. Trusted users can use Hamster after authentication as Smarthost and/or Mailrelay, whereas for unknown users the delivery of mail to local users is possible, and furthermore the unauthorized forwarding of mail from these unknown users is being prevented.

Authentication / SMTP-after-POP3:

The setting "SMTP-after-POP3" activates the corresponding procedure for the local SMTP-Server. This technically quite simple procedure secures the SMTP-server at least to some extend against unauthorized use: E-mails can only then be sent at the SMTP-server if the user has authenticated himself at the POP3-Server while checking for new mail in the past 5 minutes (the time interval can be changed in the Hamster.ini [Setup]).

Authentication methods:

Here can be set which SASL (authentication) - methods are allowed at the local SMTP-mail-server. Default: all methods are allowed.

Note however that the SASL - methods PLAIN and EXTERNAL can only be used in combination with SSL.

Attention: the authentication procedure LOGIN only masks the passwords. If possible use CRAM-MD5 or CRAM-SHA1 and/or SSL instead.

Additional options / Bounce mail addressed to unknown local users instead of sending to default-user.

Here can be set whether at the local server incoming e-mail are supposed to be returned to the sender, if the local receiver is unknown.

Additional options / Maximum size for outgoing mail

Here you can limit the size of outgoing e-mail. Default maximum is two MegaByte. Mail will be rejected by the server if the size exceeds ths maximum set. With value "0" outgoing mail will not be size-checked by the local server. Remember however that Hamster is not suited for mail of 20 MB or similar sizes (and even if that technically works, such overlarge emails can cause transport-problems and/or get rejected/bounced by the receiver with a friendly "Mailquota exceeded" message).

Maximum number of lines can be set in "Hamster.ini" under section [setup] item 'local.limit.linelen.smtp='.

Add header / Generate Message-ID, if no Message-ID is set:

If this field is checked, Hamster itself will generate the Message-ID, if there was no message-id set by the mail-program. The “local part” of the Message-ID (that is everything before "@") will be generated from the current time, the task-number and a sequential counter per time unit, which provides in combination with a non-ambiguous FQDN a unique Message-ID. This uniqueness is in contrast to message-IDs on Newsservers less important, but at least when used with Mailinglists and such very desirable.

Add header / Generate additional "X-Posting-Agent"-Header:

If this field is checked, Hamster will identify itself in the headers of every mail sent, in the form of an additional headerline "X-Posting-Agent: Hamster/1.3.xxx". This header will always contain the actual version of the Hamster program used to send the mail.

Add header / Generate additional "Received"-Header:

If this field is checked, Hamster will identify itself in the headers of every mail sent, in the form of an additional Received-header with the IP-address and if known the user-ID of the sender.

Source: C:\AA\Src20020607\EnHlp\html\menu4ga8.htm - (27)


Remote control (Telnet)

Menu: Configuration / local server... / Remote Control

Translated by Obbe-Jan Bakker

Bind to IP address:

Here can be determined to which network interface the local server is to be bound.

The standard-setting is 127.0.0.1. This pre-set value protects reliably against intruders.

Before changing this setting you should be well-informed about the functioning of the TCP/IP-stack and related security problems.

Port:

The "Port"-number determines the access port of the server i.e. under which TCP/IP-Port the client can access the local Telnet-server. Standard is port 23.

Use SSL:

Here can be adjusted whether for the local server SSL/TLS is to be used.

Maximum count of parallel client connections:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and the reader program. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Maximum count of parallel client connections to a single IP:

Here you can specify the maximum number of simultaneous allowed connections between Hamster and a client. However be aware that some reader programs create simultaneous multiple connections and also that the available memory is limited. Enter such a value that on the one hand the memory of the computer is not exhausted and on the other hand the reader at the local server can function with minimal hinderance. Value zero (0) means there is no limit, except available memory.

Authentication methods:

Here can be set which SASL (authentication) - methods are allowed at the Remote Control-server. Default: all methods are allowed.

Note however that the SASL - methods PLAIN and EXTERNAL can only be used in combination with SSL.

Attention: the authentication procedure LOGIN only masks the passwords. If possible use CRAM-MD5 or CRAM-SHA1 and/or SSL instead.

Source: C:\AA\Src20020607\EnHlp\html\menu4gc0.htm - (28)


General

Automation... / General

Translated by Obbe-Jan Bakker

Here it can be set whether the hamster automatically should perform certain tasks when the program starts.

Also can be set whether the local servers and OLE-server must be started automatically when the program starts.

Automatic purge when first startup this day

If this is checked Hamster will purge its datafiles automatically using the settings from menu " Configuration / Local Server / " for " NNTP " and " POP3 ".

These general settings can be overruled on group-basis. Groups with 'days to keep articles' set to zero will be ignored and never get purged.

Check for obsolete directories

If this is checked Hamster will check if there are any orphan directories (directories for servers that have been removed from Hamster).

If any are found these will be reported in the log. You will have to remove these remnants manually.

Automatic start local servers:

Here can be set which local servers shall be started automatically when Hamster is started.

Create statistics

Determines whether Hamster should create every day a summary message (Subject '[Hamster] Infos'). This statistic reports info for the newsgroups and is posted to a local group. The default group is internal.misc or evt. internal.statistic.

Purge outdated entries in News-Score-File

If this is checked the oldest articles logged in the News-Score-File will be removed.

This purge uses the settings from menu " Configuration / Local Server / NNTP " : days to keep for "Killfile".

Info-postings when newsserver has new group(s):
Filter on newsgroup name(reg-exp):

Here you can set a regular expression to filter for which new newsgroups you want the admin to be notified.

Default all new mewsgroups are reported to admin with an Info-posting. Default regexp is “.*“ and the group internal.misc or internal.newsgroups.

Source: C:\AA\Src20020607\EnHlp\html\menu26y8.htm - (29)


Actions

Automation / Actions

Translated by Obbe-Jan Bakker

Actions in Hamster make it possible to intervene at specific points in the program-flow of Hamster. At these points an external program and/or hamsterscript can be run automatically. The configuration of these actions can be done directly into the hamster.ini. Advice is however to use the appropriate menu in "Configuration | Automation | tab: Actions".

This menu shows all available actions in a treeview. Actions which are used are presented in bold.

Click an action in the treeview to view/add/modify the settings for this action.

There are separate settings for starting a program and/or starting a script.

A detailed description of the structure and syntax of actions is available at Hamsterscripts: Call by action

A detailed description of all possible actions is available at Files:hamster.ini[Actions]

Source: C:\AA\Src20020607\EnHlp\html\menu2a40.htm - (30)


Load Articles by MID

Automation... / Load Articles by MID

Translated by Obbe-Jan Bakker

Here you can change the list of the articles, which are set to be loaded by message-ID (MID). These articles will be loaded on the next pull for the server. Message-ID's can be added/changed/deleted manually from this window or originated from other sources:

If the message is added from the Killfile-Log (mark article/thread for retrieval) it will be set for the server which rules killfiled the message.

If the message is added because of a request by a Newsreader program then the message-id will have been added to all news-servers.

It will be pulled from whichever server is pulled first.

This can happen if an article is requested from within a newsreader (usually by clicking on a message-id) and the article is not available in the Hamster database. The newsreader might report the (Hamster) message "430 Missing article will be searched on all servers on next pull".

This feature can be disabled in " Configuration / Local server... / NNTP " additional options.

Button: [Add MIDs from Clipboard to the list of every newsserver]

This functions in a similar way to 'request from browser'.

The MIDs will be extracted from the contents of the clipboard, for example the headers of an article.

Source: C:\AA\Src20020607\EnHlp\html\menu2d9s.htm - (31)


Settings

Menu: Configuration / News: server, groups, pulls... / settings

Translated by Obbe-Jan Bakker

Pull-Limit (default / empty groups):

Here is set how many articles per news group may be loaded maximally with a separate download by the news server. Besides, the general limit and the limit is distinguished with a group used for the first time. Provided that one applies a news server with very long preservation time, a meaningful limit should be put at least with " empty group ".

Split overviews with many entries in smaller parts to pull:

Herewith the loading of the article overview can be optimized. It can be set from which number of articles in a group the overview must be split to parts should be loaded and how many articles should be loaded maximally with a part of the overview.

With the division of large load orders it can be achieved that during an interruption of the connection only the interrupted partial order must be repeated.

 In the processing of newsjobs automatically get new serverinformation (update grouplist):

With this setting you can set if together with processing a newsjob also automatically a job will be added which updates the list of newsgroups and descriptions.

 Drop residual news jobs when all threads for the newsserver failed:

With this setting you can set that if all threads for a newsserver fail the remaining jobs should be deleted or left in the job-list.

Source: C:\AA\Src20020607\EnHlp\html\menu8qsw.htm - (32)


News server

Menu: Configuration / News: server, groups, pulls... / tab: Newsserver

Translated by Obbe-Jan Bakker

Load news from (Server, Port, User/PW):

Here, all external Newsservers from which articles can be pulled or to which articles can be sent are defined and configured.

Preferred Post-Server:

Normally own articles are sent over the server, over which also new articles are retrieved. If News groups are pulled however from several servers, the selection is no longer unambiguous. Because Hamster for now can send new articles always just over one server, it must select a server. This happens after the internal sequence, except, the preferred post-server is likewise a suitable candidate. In this case the preferred post-server is used, irrespective of the internal sequence.

For the selection of the preferred server, you must mark only the server in the list and confirm with [Select].

To add a new server, choose [Add]. Give the name of the Newsserver, and if needed - separated by a comma - the port of the newsserver. (e.g. "news.cis.dfn.de,nntp” or simply only "news.cis.dfn.de "). The list of the newsgroups available on this Newsserver will automatically be loaded in the next Online-connection with the Newsservers.

To change of the configuration of a Newsservers, there is [Settings]. Here you enter in the field ‘Port’, which TCP-Port of the hamster should use with the provider. The server can be defined as readonly, so that no articles can be posted to this server. You can check boxes so that in the next online-connection the groups list and/or the groups descriptions ("Taglines") will be reloaded. Moreover you enter or clear here the username and password for the access to the server with ( [Edit] and/or [Clear]). To make Hamster request username / password when needed, you must enter a "?" as the user name / password. Also here the Timeout value can be adjusted for the connection to the server and for the server commands

With [News-Pulls] you can administer the subscribed groups of this server. In order to administer all groups, you should better use the tab: "News-Pulls".

To remove an existing newsserver from the list use the switch [delete]. The group itself remains intact, if the group was pulled only from this server, than the group will further be handled as local group.

With the menu item [server is "readonly"], you can determine, that no articles can be posted to this server.

With the menu item [Reload list of newsgroups] and/or [Reload list of group-descriptions] the list of newsgroup and/or descriptions will be loaded in the next server-contact.

SSL - settings:

Choose Usage:

Here can be set if the connection to the provider must be cryptographically secured with the SSL - protocol.

See also the SSL-FAQ.

There are four choices available:

nr	description	explanation
0.	Don't use SSL.	– default.
1.	Always use SSL on secured port.	– In this case no TLS - handshake is used. If no SSL-connection can be made, there will be no tcp-connection established.
2.	Negotiate SSL, if possible.	– Only use SSL if the provider supports it, otherwise use an insecure connection.     (This method is NOT recommended).
3.	Negotiate SSL, always.	– Always try to use an SSL-connection with TLS - handshake, if this attempt fails, no connection will be established.
Choose Verification:

There are several choices for the validation of the servers X509-certificates available:

nr	description	explanation
0.	No verify.	– default.
1.	Verify peer certificate, if present.	– If the server delivers no X509-certificate, nevertheless create a connection. Attention! If no server-certificate available, the connection will be encrypted but the server not authenticated.
2.	Always verify peer certificate.	– If the server delivers no X509-certificate, no connection will be made.
3.	Verify peer with locally installed certificates.	– In this case only a connection is made to the server if its certificate is available in the local X509-certificates folder or in the local X509-certificates-file. This is the most secure method. Ask your provider for its public X509-server-certificate.
For the local verification of the

X509-server-certificate in the field “Verify with file:“ a file with a certificate in the PEM - format can be entered.

Note! The use of SSL in connection with hamster requires additional tools. These can be found at the sites: http://sites.inka.de/ximera/stunnelw-en.zip and http://www.stunnel.org/.

See also the SSL-FAQ Hamster and SSL for this thema.

Links can also be found in the Hamster's archive at http://home.t-online.de/home/micha-wr/hamster/index.htm

Source: C:\AA\Src20020607\EnHlp\html\menu8tyo.htm - (33)


News groups

Menu: Configuration / News: server, groups, pulls... / tab: Newsgroups

Translated by Obbe-Jan Bakker

 Available Newsgroups:

This list contains all local groups (blue) and all newsgroups pulled from external newsservers (black). Moderated, “read only” and “mailinglist” groups are displayed with additional info, the group type (green): (moderated), (read-only) or (gateway)

On "tab: News-Pulls" (for all servers) and “ tab: Newsserver / button: News-Pulls ” (for a single server) newsgroups can be subscribed resp. unsubscribed. In this list, each group is indicated only once, no matter of how many newsservers it is subscribed.

The internal (local) groups of Hamster "General Settings... / tab: Internal groups" can not be erased. In a new installation at least the local newsgroup "internal.misc" is available.

New local groups can be added with the button [Add local Grp.]

The defaults of the groups can be changed with the button [Settings]: These concern the group description, the type of group, and the server at which own (new) articles will be posted (if the group is subscribed at more than one server). If necessary, it can also be configured here that new articles of this group should not be posted to the provider, but rather be a feed to other servers or be sent to a group moderator or a mailinglist.

The following group types are available:

1.“Posting allowed“ =y This is the default for regular newsgroups
2. “Readonly“       =n Normal newsgroup, but no posting allowed
3. “Moderated“      =m Moderated newsgroup, an e-mail address must be entered for the moderator
4. “Gateway“        =g Mailinglist, an e-mail address must be entered for the listgenerator. See also the FAQ.

Further settings concern the editing of the INI file with [Edit Ini] and individual settings for the maximum number of new articles to retrieve for each pull (Pull-limit) and the number of days to keep articles (days since loading), for use in the function "purge". As default for the last two settings are used the values entered at "Configuration / News:.../ tab: Settings" and "Configuration / Local server... / tab: NNTP".

For deleting of groups, the button [Delete] can be used, the corresponding news-pulls are thereby automatically deleted, all Postings stored in the hamster for the group are thereby also deleted.

With the button [Pull Now], the selected newsgroup(s) will be pulled from all subscribed servers. That is, all articles available for these group(s) on the newsserver of the provider will be retrieved.

For cleaning up of individual groups, the button [Purge Now] can be used.

To change/purge/reset a group to the 'new group (empty)' situation, use the button [Reset].

Source: C:\AA\Src20020607\EnHlp\html\menu8x4g.htm - (34)


News-Pulls

Menu: Configuration / News: server, groups, pulls... / tab: News-Pulls

Translated by Obbe-Jan Bakker

Groups to pull from server (group name, server name) :

This list contains all news pulls i.e. all subscribed groups of all available newsservers, sorted by group name.

With [Add] you can subscribe to new groups.

See also “ tab: Newsserver / button: News-Pulls ”.

It is possible to select a group on more than a server. Certainly, by this redundancy the amount of the data to be loaded increases, but reduces at the same time the chance of missing articles. Besides temporary loss of a newsserver can be compensated very well.

With [Delete] you can delete news-pulls (= combination of group and servers) from the list.

Note: This does not delete the group, but only the subscription of the corresponding server.

If also the last subscription is deleted, the group becomes automatic a local group.

You can delete the group itself completely from Hamster with [Delete] on the tab Newsgroups

Source: C:\AA\Src20020607\EnHlp\html\menu90a8.htm - (35)


Killfile-Log/-Settings...

Menu: Configuration / Killfile-Log/-Settings...

Translated by Obbe-Jan Bakker

The windows for the editing and processing of the score- or Killfile:

The first tab shows the content of the file "kills.log".

This log displays the overview-information of articles, which were not loaded due to scorefile-rules in News-Score/Killfile.

Displayed articles are all articles whose score value lies between -1 and an adjustable setting (see tab settings).

Articles with a score value even below this setting will not even be visible in this overview.

An article-reference always consists of the combination Newsserver+Message-ID.

Therefore the one and same article can appear multiple times if one pulls a group from multiple servers.

By clicking on one of the column-headers (Server, Group, Score, ...), the list will be sorted based on the values of this column.

Identical values in this column will be sorted by up to two additional fields, which you can select with menu

"File / Set sort-sequence..." (e.g. when sorting by "Group", a good sequence might be "Group, Subject, Date").

If you double-click a line with the left mouse-button, all available infos for the article are displayed.

The context-menu of this list (right-click above displayed) gives access to the same functions for the selected lines as the menu "entries".

The second tab contain settings for the News-Score/Killfile. It contains a field for the maximum score value in the head line. Articles with a score lower than this setting will no longer be logged in the killfile.

The third tab is a simple editor for the news Score/Killfile.

This menu contains the following items

:

File / Set sort-sequence...

Here you can optionally set a secondary and third sort-order item. The primary sort-order can be changed by clicking on a column-header.

File / Save all changes

Stores all changes for settings and demands for downloading of articles and threads.

File / Undo all changes

Cancels all changes made to settings and demands for downloading of articles and threads.

File / Exit

Ends editing the killfile.

Entries / Shows Details...

Shows details of the currently selected article.

Entries / Select all

Selects all entries in the Killfile for further processing.

Entries / Mark for retrieval

Adds the Message-ID to the file "getmids.txt" of the associated server.

The article will then be retrieved automatically with the next on-line connection with this server, provided that the article is not already deleted (expired) there.

Entries / Delete...

Deletes the marked article(s) from the Killfile.

Entries / Retrieve whole thread

Mark complete thread from this article for retrieval.

Entries / Delete whole thread

Remove marked article(s) and all their follow-up articles from the kill file,

and mark them for deletion in the score file.

Entries / Scorefile-Test

The selected article is tested with the current filter settings (scorefile).

The function shows the resulting scorevalue and the list of matching score-lines.

See also the description of the file Scores.hst.

Context menu:

Shows Details...:

Shows details of the currently selected article.

Select all:

Selects all entries, either for marking or deleting (see below).

Mark for retrieval:

Message-IDs of all selected articles are saved in file ".\Server\(servername)\getmids.txt" of the appropriate servers. These articles will be loaded automatically with the next online-session for this server, provided that the article is not already expired there.

Retrieve whole thread: / Delete whole thread:

Here complete Threads can be reloaded or be deleted.

Delete...:

Deletes all selected entries.

Scorefile-Test:

The selected article is tested with the current filter settings (scorefile).

The function shows the resulting scorevalue and the list of matching score-lines.

See also the description of the file Scores.hst.

Source: C:\AA\Src20020607\EnHlp\html\menu2y7k.htm - (36)


Scorefile, Configuration

Menu: Configuration / Killfile-Log/Settings: Kill-/scorefile

Translated by Heiko Studt, corrected by Shehu Dikko, updated by Obbe-Jan Bakker

tab: Settings

  Don't log killed articles if score is lower than (-1 to -9999): _____
  Days to keep Log-Entries (used for purge, 0 = forever): _____

Above sets the maximum negative score below which articles will not be recorded/shown in the killlog?. See also Killfile-log for more details.

The 'Days to keep' determines the number of days before scored articles can be removed automatically from the killfile-log. This is the same setting as 'Killfile-Log' in menu "Configuration / Local server... / tab: NNTP". This purge of outdated entries can be automated in menu "Configuration / Automation / tab: General".

tab: Scorefile

This is a simple editor for the news score/killfile. The score- or killfile is a filter to filter out unwanted articles and/or email. (See also: " Files : Scores.hst ").

To edit the file with your favourite editor use the menu "Configuration / Edit special files / Edit News-Score-File" from the Hamster main-window.

Source: C:\AA\Src20020607\EnHlp\html\menu31dc.htm - (37)


Score file, Set sort-sequence

Menu: Configuration / Killfile-Log/-Settings/File: Set sort-sequence...

Translated by Obbe-Jan Bakker

This is the place to set the second and third sort-sequence for viewing the killfile-log.

The second and third sort-codes must be entered as numbers.

The primary sort-order can only be set/changed by clicking on a column-header in the killfile-log tab.

0 = Server

1 = Group

2 = Score

3 = Number

4 = Subject

5 = From:-Header

6 = Date:-Header

7 = Message-ID:-Header

8 = Ref's:-Header

9 = Byte

10 = Lines

11 = Xref-Header

Source: C:\AA\Src20020607\EnHlp\html\menu2y9c.htm - (38)


Score file, changes store

Menu: Configuration / Killfile-Log/-Settings.../File: Save all changes

Translated by Obbe-Jan Bakker

Stores all changes for settings and demands for downloading of articles and threads.

The killfile and getmids.txt files will be updated.

Source: C:\AA\Src20020607\EnHlp\html\menu2yb4.htm - (39)


Score file, changes reject

Menu: Configuration / Killfile-Log/-Settings.../File: Undo all changes

Translated by Obbe-Jan Bakker

Cancels all changes made to settings and demands for downloading of articles and threads.

Source: C:\AA\Src20020607\EnHlp\html\menu2ycw.htm - (40)


Score file, Exit

Menu: Configuration / Killfile-Log/-Settings.../File: Exit

Translated by Obbe-Jan Bakker

Ends editing the killfile.

Source: C:\AA\Src20020607\EnHlp\html\menu2yeo.htm - (41)


Score file, detail

Menu: Configuration / Killfile-Log/-Settings.../Entries: Show Details...

Translated by Obbe-Jan Bakker

Shows details of the currently selected article in a popup window. These details can optionally also be copied to the clipboard.

Source: C:\AA\Src20020607\EnHlp\html\menu31f4.htm - (42)


Score file, Select all

Menu: Configuration / Killfile-Log/-Settings.../Entries: Select all

Translated by Obbe-Jan Bakker

Selects all entries in the Killfile for further processing.

Source: C:\AA\Src20020607\EnHlp\html\menu31gw.htm - (43)


Score file Mark for retrieval

Menu: Configuration / Killfile-Log/-Settings.../Entries: Mark for retrieval

Translated by Obbe-Jan Bakker

Adds the Message-ID to the file "getmids.txt" of the associated server.

The article will then be retrieved automatically with the next on-line connection with this server, provided that the article is not already deleted (expired) there.

Source: C:\AA\Src20020607\EnHlp\html\menu31m8.htm - (44)


Score file, deleting

Menu: Configuration / Killfile-Log/settings: delete

Translated by Heiko Studt, corrected by Shehu Dikko

Deletes the article permanently in the score-/ killfile.

Source: C:\AA\Src20020607\EnHlp\html\menu31o0.htm - (45)


Score file, Retrieve whole thread

Menu: Configuration / Killfile-Log/-Settings.../Entries: Retrieve whole thread

Translated by Obbe-Jan Bakker

Mark complete thread from this article for retrieval.

Removes all replies to the marked Postings from the killfile and stores the Message-IDs in the file "getmids.txt" of the associated server.

These articles will then be retrieved automatically with the next on-line connection with this server, provided that the articles are not already deleted (expired) there. Also, an entry is written into the score file, so that follow-up postings in this Thread from now will be loaded immediately. Also is checked whether already a corresponding entry exists.

The section in the score file and the value which is assigned to the Thread, can be manually set in the " Hamster.ini ". under score.RetrieveThread.section and score.RetrieveThread.value.

Source: C:\AA\Src20020607\EnHlp\html\menu31io.htm - (46)


Score file, Delete whole thread

Menu: Configuration / Killfile-Log/-Settings.../Entries: Delete whole thread

Translated by Obbe-Jan Bakker

Remove marked article(s) and all their follow-up articles from the kill file, and mark them for deletion in the score file.

Remark: If the marked article is not the first article in the thread, the delete will only be down-thread and not up-thread (thread-root).

Source: C:\AA\Src20020607\EnHlp\html\menu31kg.htm - (47)


Score file, score test

Menu: Configuration / Killfile-Log/-Settings.../Entries: Scorefile-Test

Translated by Obbe-Jan Bakker

The selected article is tested with the current filter settings (scorefile).

The function shows the resulting scorevalue and the list of matching score-lines.

See also the description of the file Scores.hst.

Source: C:\AA\Src20020607\EnHlp\html\menu31ps.htm - (48)


POP3-Settings

Menu: Configuration / Mail: settings & server... / POP3-Settings

Translated by Paul Batchie

This page determines default global settings for all POP3-Servers.

Options for POP3 mailserver : (Pertains to mail reception)

Pulling email from external POP3 - servers:

[Leave email on server i.e. do not delete]

Here one sets whether the E-mail on the server should be left intact instead of the usual delete. Leaving mail on servers can be useful during an initial testing process, but left in place, can cause mailboxes to fill up, thus causing bounces.

[Ignore already loaded email, i.e., do not load again]

This setting makes sense when leaving mail on the server, so that E-mail will be loaded only once.

[Add Header]

Hamster will add a local "received" Header to each mail if this option is selected.

Mails => News Gateway:

[Automatically set Header “Followup-To: poster“]

Here can be decided whether the hamster sets the header Followup-To: poster for incoming articles which are received by hamster as mail and must be send to a local newsgroup. This is recommended for local newsgroups which handle mailinglists and should use the SMTP-client of the newsreader instead of the News-to-mail-gateway of Hamster for sending replies to these articles.

[Generate the “!Envelope From“ over the Standard-Hamster-“From“ instead of over the News-“From“-Header form]

Here can be specified how the Envelope-From header will be generated for the News-to-mail-gateway.

The use of the News-From- header is recommended, if multiple users use the Hamster together.

 Filter incoming email

Options for mail server POP3 / general filtering after size: {POP3}

The following options specify the treatment of extra large mails. This size examination is executed before the mail-filter file and enables not loading mail above a specified size. A value of "0" disables this mail examination.

[Notify to Admin, if mailsize exceeds ... bytes]

If the set limit value is exceeded, a notifying mail is sent to the user "admin". This option works either independently of, or in conjunction with, the Ignore or Delete options below.

[Ignore mail, if mailsize exceeds ... bytes]

If this limit value is exceeded, the mail is not loaded, but is left on the mail server. No notification takes place to "admin".

[Delete mail, if mailsize exceeds ... bytes]

If this limit value is exceeded, the mail not only is not loaded, but also is deleted on the mail server. In contrast to news, once mail is deleted it is lost permanently. Therefore, this option should be applied thoughtfully.

[Edit "MailFlt.hst" for additional filter settings ]

This is a direct link command button to the mail-filter-file MailFilt.hst, which contains the rules for the loading and delivery of mails.

Source: C:\AA\Src20020607\EnHlp\html\menu93g0.htm - (49)


Edit Mail-Score-/Killfile

Menu: Configuration / Edit special files / mail-score-/Killfile

Translated by Heiko Studt

With the text editor chosen under general settings the score file for incoming mails can be edited. The possibilities goes from divert mailing lists in local groups to sort mails on the base of sender and delete by size etc. or forwarding to the list of the local receivers and other similars.

The explanations to the filter syntax can be found in the help to the file " MailFilt.hst".

For comfortable and orderly editing of scripts and score files there exist Syntax schemes. These are templates for various editors with different components of the syntax to colour them differently.

Additional information can be found in the Hamster script-archive. URL see: Links to Hamster-related sites and infos

Source: C:\AA\Src20020607\EnHlp\html\menu4mk0-MOVED.htm - (50)


POP3-Mailserver

Menu: Configuration / mail (server) / POP3-Mailserver

Translated by Paul Batchie, updated by Obbe-Jan Bakker

A Listbox is shown, displaying:

Load eMails from (Server, Port, User / Password):

Here the POP3-Servers are entered, from which Hamster is to fetch email.

For adding a new POP3-Server click the command button [Add].

Input in the following dialog the server name, and if necessary the server-port (separated by a comma).

Example:

"pop.myprovider.com, pop3 " or briefly, "pop.myprovider.com ".

If the new server should already exist, Hamster asks whether an alias is to be created. This permits e.g. the meaningful use of several GMX accounts. The alias is recognizable by the suffix "/xx", whereby xx stands for any text (for example a sequential numbering).

You can delete a listed POP3-Server with the command button [Delete].

With the command button [Setting] you can determine the following:

· The TCP-port, which Hamster is to use with the remote server of the provider; Standard is the Port 110, or "pop3".

· The input of password and user name for the server. The password fields can have three statuses:

· "{ASK}"   Hamster tests the user name and password only if necessary. This is set by specifying a "?" for the password.

·"{SET}"   Hamster stores the data in the file "password!!!" (see note).

· "{NONE}" Hamster does not use Authentication.

· The Local user account which is to be assigned eMail by this server. Here all local users are offered in a drop-down box, according to the following pattern:

·

  Admin - admin = hamster administrator
     |       |               |
     |       |               +---------user name in long form
     |       |
     |       +-------------------------user name in short form
     |
     +---------------------------------group name

· Here the password and user name for the server can be entered as well.

· Which section of the Mailfilter file Mailfilt.hst this server will use. This file can be edited directly by means of a command button.

· How emails are to be treated after being loaded from the server: leave/do not leave/use default. The default spec here is the global specification for all servers from the menu Configuration/Mail:settings & server.../tab POP3-Settings.

· Possible overides for connection to the server and command implementation timeouts.

·

SSL - settings:

Choose Usage:

Here can be set if the connection to the provider must be cryptographically secured with the SSL - protocol.

See also the SSL-FAQ.

There are four choices available:

nr	description	explanation
0.	Don't use SSL.	– default.
1.	Always use SSL on secured port.	– In this case no TLS - handshake is used. If no SSL-connection can be made, there will be no tcp-connection established.
2.	Negotiate SSL, if possible.	– Only use SSL if the provider supports it, otherwise use an insecure connection.     (This method is NOT recommended).
3.	Negotiate SSL, always.	– Always try to use an SSL-connection with TLS - handshake, if this attempt fails, no connection will be established.
Choose Verification:

There are several choices for the validation of the servers X509-certificates available:

nr	description	explanation
0.	No verify.	– default.
1.	Verify peer certificate, if present.	– If the server delivers no X509-certificate, nevertheless create a connection. Attention! If no server-certificate available, the connection will be encrypted but the server not authenticated.
2.	Always verify peer certificate.	– If the server delivers no X509-certificate, no connection will be made.
3.	Verify peer with locally installed certificates.	– In this case only a connection is made to the server if its certificate is available in the local X509-certificates folder or in the local X509-certificates-file. This is the most secure method. Ask your provider for its public X509-server-certificate.
For the local verification of the

X509-server-certificate in the field “Verify with file:“ a file with a certificate in the PEM - format can be entered.

Note! The use of SSL in connection with hamster requires additional tools.

These can be found at the sites: http://sites.inka.de/ximera/stunnelw-en.zip and http://www.stunnel.org/.

Links can also be found in the Hamster's archive at http://home.t-online.de/home/micha-wr/hamster/index.htm

(Note:)

Use of the APOP of procedure for the Authentication:

In order to use the APOP procedure (the encoded transmission of name and password, with POP3 name and password are transferred as clear text, without any encryption/security), prefix the password with "APOP: ". For the obligatory use of conventional authentication the prefix " PASS: " is used. This is only necessary if " PASS: " or " APOP: " are part of the actual password.

Examples of input in the password field:

secret = > uses: USER/PASS standard setting

APOP:secret = > uses APOP

PASS:APOP:secret = > uses USER/PASS with password " APOP:secret".

PASS:PASS:secret = > uses: USER/PASS with password " PASS:secret ".

Use the POP SASL procedure for the authentication:

In order to use SASL (the coded transmission of name and password, with POP3 these data will be normally transferred unencrypted) for POP-SASL the prefix of the respective SASL-mechanism or the prefix “SASL:“ for the automatic selection of the mechanism is to be placed in front of the password. For the obligatory use of the conventional authentication procedure the prefix "PASS:" can be used. This is only necessary, if “PASS:” is part of the actual password.

Supported SASL - mechanisms are LOGIN, PLAIN, CRAM-MD5, CRAM-SHA1 and EXTERNAL.

Examples:

CRAM-MD5: CRAM-MD5:secret => Enforces the use of CRAM-MD5 as authentication mechanism.
SASL:     SASL:secret     => Uses SASL for the automatic selection of the authentication mechanism.

Use the outdated (obsolete) POP-AUTH procedure for authentication:

To use the POP-AUTH mechanism for the authentication prefix the password with the prefix “AUTH:“.

Attention! This mechanism sends the passwords in clear text, because there is no encryption mechanism agreed on between server and client.

Example:

AUTH:     AUTH:secret     => Use SASL for the automatic selection of the authentication mechanism.

(endNote)

Source: C:\AA\Src20020607\EnHlp\html\menu96ls.htm - (51)


SMTP-Settings

Menu: Configuration/ Mail Server / SMTP-Settings

Translated by Paul Batchie

Here are set basic global options for sending mails.

[Maximum Attempts for Sending a Mail:]

Hamster will try to send a mail the number of times specified here.

Notices are generated for each failed attempt, then finally an Abort notice is sent.

[Delete Mail if all Attempts have failed]

If the Delete Mail if all Attempts have failed is checked, the mail will be removed from the Mail.Out folder.

Source: C:\AA\Src20020607\EnHlp\html\menu96uo.htm - (52)


SMTP-Mailserver

Menu: Configuration/ Mail Server / SMTP Mailserver

Translated by Paul Batchie, updated by Obbe-Jan Bakker

[ListBox] "Send mails to (Server, Port, User/Password):"

Here the mail servers are included to which E-mails should be sent.

[Add] Click the "Add" command button to add a SMTP -server. In the resulting dialog the server name, and when required the server-port (separated by a comma). is entered (e.g., "pop.myprovider.com, smtp". or in short form. "pop.myprovider.com").

If the new server already exists in Hamster you will be asked if you want to create an alias for the server. This allows e.g. the meaningful use of multiple GMX-accounts. The alias can be recognized by an additional "/xx". Hereby represents the xx an arbitrary text. (e.g. an incrementing number).

[Delete] In order to delete a selected SMTP- server the command button [Delete] is clicked.

[TextBox] Default SMTP server:

The SMTP-server entered will be used for sending outgoing mails if more than one SMTP-server is registered.

To select the default mark the new server in the list and choose [Select].

[Settings] Here options for each SMTP-server can be set. In the resulting dialog, if the SMTP-server requires SMTP Authentication, the required information (protocol, name and password) can be entered via the Edit command button. ( See "Files and Folders" / "(Server Names)" for details ).

In addition with the field ‘Port‘ can be specified which TCP-Port the Hamster should use with the provider.

For the connection with the server a time-out can be set here separately for the respective server.

SSL - settings:

Choose Usage:

Here can be set if the connection to the provider must be cryptographically secured with the SSL - protocol.

See also the SSL-FAQ.

There are four choices available:

nr	description	explanation
0.	Don't use SSL.	– default.
1.	Always use SSL on secured port.	– In this case no TLS - handshake is used. If no SSL-connection can be made, there will be no tcp-connection established.
2.	Negotiate SSL, if possible.	– Only use SSL if the provider supports it, otherwise use an insecure connection.     (This method is NOT recommended).
3.	Negotiate SSL, always.	– Always try to use an SSL-connection with TLS - handshake, if this attempt fails, no connection will be established.
Choose Verification:

There are several choices for the validation of the servers X509-certificates available:

nr	description	explanation
0.	No verify.	– default.
1.	Verify peer certificate, if present.	– If the server delivers no X509-certificate, nevertheless create a connection. Attention! If no server-certificate available, the connection will be encrypted but the server not authenticated.
2.	Always verify peer certificate.	– If the server delivers no X509-certificate, no connection will be made.
3.	Verify peer with locally installed certificates.	– In this case only a connection is made to the server if its certificate is available in the local X509-certificates folder or in the local X509-certificates-file. This is the most secure method. Ask your provider for its public X509-server-certificate.
For the local verification of the

X509-server-certificate in the field “Verify with file:“ a file with a certificate in the PEM - format can be entered.

Note! The use of SSL in connection with hamster requires additional tools.

These can be found at the sites: http://sites.inka.de/ximera/stunnelw-en.zip and http://www.stunnel.org/.

Links can also be found in the Hamster's archive at http://home.t-online.de/home/micha-wr/hamster/index.htm

The password field has three modes:

"{ASK}"    Hamster asks for the user name and password only if necessary. This is set by specifying a "?" for the password.

"{SET}"    Hamster stores the data in the file "password.!!!" (see note below).

"{NONE}"   Hamster does not use Authentication.

Use of the SASL procedure for authentication:

To use the SASL-procedure (permits the encoded transmission of name and passport word, with POP3 these data are normally transmitted unencoded) obligatorily for SMTP-AUTH, the password must be prefixed with the the prefix of the respective SASL-mechanism. For that obligatorily use of the conventional authentication procedure the prefix "PASS: " can be used. This is only required if “PASS:” is part of the actual password.

Supported SASL - mechanism are LOGIN, PLAIN, CRAM-MD5, CRAM-SHA1 and EXTERNAL.

Important Password note:

The passwords are stored in the file "password.!!!". Never leave this file accessible to other persons, not even if you have problems with internet access or similar problems!

The entries in the file "password.!!!" Are encoded with the "Blowfish" algorithm. The cryptographic key applied to it contains - according to setting - u.a. some system information (PC-name, operating system-version etc) and the Windows login name.

This complicates the use of a stolen password-file, but the general belief that the coding of a file with this algorithm is 100% sure, is incorrect. Still, this procedure is safer than storage in the clear text or in ROT13, or by XOR to hidden files.

Source: C:\AA\Src20020607\EnHlp\html\menu99rk.htm - (53)


Disable/Enable Advanced Configuration

Disable/Enable Advanced Configuration

Translated by Obbe-Jan Bakker

With this setting Hamster toggles between a limited set of viewable / changable settings and a much more complete and thereby more complicated set of viewable / changable settings in the Hamster menus. For most users the limited set will be sufficient.

Attention!

Before making changes to these more advanced settings be sure to understand the consequences of changes and how to reverse these if necessary.

Source: C:\AA\Src20020607\EnHlp\html\menu2mr4.htm - (54)


Edit special files

Menu: Configuration / Edit special files

Translated by Obbe-Jan Bakker

With the text editor set in menu “general settings“ here several of the configurationfiles of Hamster can be edited.

Source: C:\AA\Src20020607\EnHlp\html\menu4je8.htm - (55)


Edit News-score-/Killfile

Menu: Configuration / Edit special files / news-score-/Killfile

Translated by Heiko Studt

With the text editor chosen under general settings the score file for incoming news-articles can be edited.

The explanations to the filter syntax can be found in the help to the file " Scores.hst".

A list of the scorefile filtered articles can be viewed from "file / Killfile-Log/-Settings" and, if necessary, can be reloaded.

For comfortable and orderly editing of scripts and score files there exist Syntax schemes. These are templates for various editors with different components of the syntax to colour them differently.

Additional information can be found in the Hamster script-archive. URL see: Links to Hamster-related sites and infos

Source: C:\AA\Src20020607\EnHlp\html\menu4je8-MOVED.htm - (56)


Edit Hamster.ini...

Menu: Configuration / Edit special files / Edit hamster.ini

Translated by Obbe-Jan Bakker

With the text editor set in menu “general settings“ here the file hamster.ini can be edited.

Source: C:\AA\Src20020607\EnHlp\html\menu4je8-INI.htm - (57)


Edit hosts (resolve domains to IPs)...

Menu: Configuration / Edit special files / Edit hosts (resolve domains to IPs)

Translated by Obbe-Jan Bakker

With the text editor set in menu “general settings“ here the file hosts can be edited.

This file is located in the windows folder. For an example and further information see the file hosts.sam also in the windows folder.

Source: C:\AA\Src20020607\EnHlp\html\menuhost.htm - (58)


Reload configuration

Menu: Configuration / Reload Configuration

Translated by Obbe-Jan Bakker

With this menu option Hamster reloads all its settings from the ini-files.

Use this to ensure Hamster is actually using the changed settings, after making changes to hamster.ini or any of the special files from Hamster (with Hamster running).

Source: C:\AA\Src20020607\EnHlp\html\menu4mk0.htm - (59)


1-9:user-defined menu's
user-defined menu's

Menu: Online / 1-9:...

Translated by Heiko Studt

Appears if there are entries in " menu: Configuration | general configuration | on-line menu " to defined server groups as opposed menu name. Usually it assumes an existing Internet connection, an automatic dial-in is not integrated (so far ;-)).

Source: C:\AA\Src20020607\EnHlp\html\menu9pv4.htm - (60)


All servers (News+Mail)

Menu: Online / all servers (News+Mail)

Translated by Heiko Studt

This function starts all existing NNTP- , POP3-and SMTP-servers. If one does not work with scripts, this menu point might be very timesaving.

Source: C:\AA\Src20020607\EnHlp\html\menu9t0w.htm - (61)


Single NNTP-/POP3-/SMTP- server

Menu: Online / NNTP-/POP3-/SMTP- server

Translated by Obbe-Jan Bakker

This function starts a single existing server of the respective server type.

"NNTP-server" start a single news-server (send / receive news messages).

"POP3-server" start a single mail-server (receive email messages).

"SMTP-server" start a single mail-server (send email messages).

Source: C:\AA\Src20020607\EnHlp\html\menu9w6o.htm - (62)


RAS-dialing (open connection)

Menu: Online / RAS-dialing

Translated by Obbe-Jan Bakker

This menu-item opens one of the available RAS-network-connections.

For a successful connection username and password must have been set in menu " Configuration / Accounts & passwords... / Passwords ".

To make Hamster ask for username/password on connecting set these to "?".

At the moment the attempt to connect is not executed as a Thread, so Hamster may seem to "hang" for some time when experiencing connection problems.

This is normal and does not indicate a malfunctioning Hamster.

Source: C:\AA\Src20020607\EnHlp\html\menu9zcg.htm - (63)


RAS-hangup (close connection)

Menu: Online / RAS-Hangup

Translated by Obbe-Jan Bakker

This menu item closes an existing RAS network-connection.

Source: C:\AA\Src20020607\EnHlp\html\menu9zlc.htm - (64)


Stop all tasks

Menu: Online / stop all tasks

Translated by Obbe-Jan Bakker

When selecting this menu-item, Hamster tries to stop all running tasks.

Yes, I really mean "tries to" ... ;-)

Source: C:\AA\Src20020607\EnHlp\html\menu02i8.htm - (65)


( available scripts )

Menu: script / (available Scripts)

Translated by Obbe-Jan Bakker

Starts the selected script, with the extension "*.hsc" which is suppressed in the menu.

Source: C:\AA\Src20020607\EnHlp\html\menu5c4w.htm - (66)


Manage scripts and modules

Menu: script / Scripts and modules

Translated by Heiko Studt

Starts the integrated script manager. For the syntax of HamsterScript see the explanations to the script language hs2.

For comfortable and orderly editing of scripts and score files there exist Syntax schemes.

These are templates for various editors with different components of the syntax to colour them differently.

Additional information can be found in the Hamster script-archive: URL see: Links to Hamster-related sites and infos

Source: C:\AA\Src20020607\EnHlp\html\menu5fao.htm - (67)


Stop all scripts

Menu: script / Stop all scripts

Translated by Obbe-Jan Bakker

Ends all running scripts immediately.

Source: C:\AA\Src20020607\EnHlp\html\menu5lm8.htm - (68)


Start / stop News-server (NNTP)

Menu: local servers / start / stop news server (NNTP)

Translated by Obbe-Jan Bakker

This menu starts or stops the local NNTP-server. If marked the local newsserver is already running.

This means, that you can pull news from and post news to Hamster with your newsreader.

Source: C:\AA\Src20020607\EnHlp\html\menu0yeo.htm - (69)


Start / stop Mail-server (POP3)

Menu: local servers / start / stop mail server (POP3)

Translated by Obbe-Jan Bakker

This menu starts or stops the local POP3-Server. If marked the local mailserver is already running.

This means, that you can receive email from Hamster with your email program.

Source: C:\AA\Src20020607\EnHlp\html\menu11kg.htm - (70)


Start / stop Mail-server (IMAP)

Menu: local servers / start/stop mail server (IMAP)

Translated by Obbe-Jan Bakker

This menu starts or stops the local IMAP-Server. If marked the local mailserver is already running.

This means, that you can receive email from Hamster with your email program.

Source: C:\AA\Src20020607\EnHlp\html\menu1b1s.htm - (71)


Start / stop Mail-server (SMTP)

Menu: local servers / start / stop mail server (SMTP)

Translated by Obbe-Jan Bakker

This menu starts or stops the local SMTP-server. If marked the local mailserver(SMTP) is already running.

This means, that you can send email to Hamster with your email program.

Source: C:\AA\Src20020607\EnHlp\html\menu14q8.htm - (72)


Start / stop remote control Telnet-server (RECO)

Menu: local servers / start/stop remote control Telnet-server (RECO)

Translated by Obbe-Jan Bakker

This menu starts and/or stops the local Telnet-server which allows remote control of the Hamster.

Source: C:\AA\Src20020607\EnHlp\html\menu1e7k.htm - (73)


Open Dir(s) for News/Mails ...

Menu: local servers / open Dir(s) for News/Mail...

Translated by Obbe-Jan Bakker

This menu opens the folder (News.Out, Mails.Out) in which the outgoing articles / postings / news is temporarily stored up to final dispatch.

Changes in the waiting "msg" files should only be made with care and knowledge of the consequences.

This menu is especially useful to cancel a message already sent to Hamster but not yet further dispatched by Hamster.

Simply delete the corresponding msg-file from this folder.

This won't cause any problems in Hamster.

The News.Err folder is the folder in which incorrect articles / Postings / news are stored.

Source: C:\AA\Src20020607\EnHlp\html\menu17w0.htm - (74)


Contents

Menu: Help / Contents

Translated by Obbe-Jan Bakker

Windows Help file.

Source: C:\AA\Src20020607\EnHlp\html\helpcont.htm - (75)


All helpfiles

Menu: Help / All helpfiles

Translated by Obbe-Jan Bakker

This menu allows the start of the hamster helpfiles for other languages than the language set for Hamster itself.

Source: C:\AA\Src20020607\EnHlp\html\helphelp.htm - (76)


System-Information

Menu: Help / System-Information

Translated by Obbe-Jan Bakker

Hamster and Windows System-Information.

Version-information of Hamster, Windows and essential stuff (for Hamster) like winsock and rasapi.

Source: C:\AA\Src20020607\EnHlp\html\helpinfo.htm - (77)


History

Menu: Help / history

Translated by Obbe-Jan Bakker

Hamster history.

Source: C:\AA\Src20020607\EnHlp\html\helphist.htm - (78)


About

Menu: Help / About

Translated by Obbe-Jan Bakker

Windows about box with tabs with essential info. Maintainer, Authors, license and credits.

Source: C:\AA\Src20020607\EnHlp\html\helpabou.htm - (79)


Protocol for Newsjobs order

Context menu: protocol for newsJobs queue

Translated by Obbe-Jan Bakker

If still orders in the new job list wait for their execution, these are indicated in this window, sorted according to priority.

Per line thereby type of order, complementary data of the order and priority is indicated.

Over the Buttons above the actual list, the total list can be emptied, some jobs deleted, or the priority of newsjobs changed.

Source: C:\AA\Src20020607\EnHlp\html\menu6xbk.htm - (80)


Show single thread

Context menu: Show single thread

Translated by Obbe-Jan Bakker

Here you can view the log of a single (selected) thread in a separate window.

Such a window will not be updated automatically, like the 'normal' log-windows.

Use the update-button to refresh the thread-view of a running process.

Source: C:\AA\Src20020607\EnHlp\html\menu6kog.htm - (81)


Copy single line to clipboard

Context menu: Copy single line to clipboard

Translated by Heiko Studt

Here you can copy a separate line of the log to clipboard.

You can access it by "paste" in any text editor of your choice.

Source: C:\AA\Src20020607\EnHlp\html\menu6nu8.htm - (82)


Copy all lines to clipboard

Context menu: Copy all lines to clipboard

Translated by Heiko Studt

Here you can copy the whole log to the clipboard.

You can access it by "paste" in any text editor of your choice.

Source: C:\AA\Src20020607\EnHlp\html\menu6r00.htm - (83)


Clear log(s)

Clear log(s)

Translated by Obbe-Jan Bakker

With this menu point you can clear the current log.

Source: C:\AA\Src20020607\EnHlp\html\menu6u5s.htm - (84)


Hamster-Scripts

Hamster Script, version 2 ("hs2", suffix: ".hsc")

Translated by Paul Batchie

A hamster script (or simply script) is a sequence of statements which executes frequently needed processing steps automatically. This not only saves recurring manual calling of menus and the handling of the appropriate dialogs, but many routines only can be implemented and adapted to non-standard needs via script. Scripts also permit simple interactions with the user.

Scripts are to be stored in text files, and can be created and edited in, for example, the Windows wordprocessor NotePad. The file name suffix for Hamster script is ".hsc", and for Hamster modules is ".hsm". Script files are to be stored in the designated Hamster script directory, and module files in the designated Hamster module directory. If no such designations are made in the Hamster.ini file, scripts and modules will be kept in the Hamster root directory. These directories can be changed with the keys Scripts and Modules of the section [Directories] in the Hamster.ini.

The following sections describe the language of Hamster script:

Statements and comments
Pre-processor statements

Jumps	Variables, constants and data types
Conditionals, Branches	Expressions and operators
Loops	Boolean expressions
Procedures and functions	Built-in statements
Modules	Built-in functions (general)
Concurrent Scripts !GERMAN!	Built-in functions (servers)

Call of scripts by command line
Call of scripts by action

Source: C:\AA\Src20020607\EnHlp\html\hscr08q6.htm - (85)


Hamster-Event-Objects

Hamster-Event-objects (Win32)

Translated by Obbe-Jan Bakker

Hamster supports the "Event-objects":

Mutex + "evtHamster.IsIdle". This object signals true when there are no active tasks (idle) and false when there are active tasks (Active tasks are processes such as purge, pulling news etc.).

Mutex + "evtHamster.StopScript". This object signals that the processing of a script must stop.

Furthermore are still supported the following additional Events:

 _main          Global event, tells if Hamster is started.
 _mailin        E-mail received from remote server.
 _mailout       E-mail received from local server destined for external server.
 _mailinternal  E-mail received from local server with local destination.
 _newsout       Article(s) received on local server.
 _rasconnected  A RAS connection has been established.
 _rashangup     A RAS connection has been closed.
 _purge         Hamster purge.

After starting tasks in Hamster, you can use this event-object to wait until Hamster has finished all these tasks. The advantage of this wait-approach is, that your application is suspended (i.e. does not consume processor-time) until the event is signaled again.

One can use this object, e.g., for programs and scripts, that further process articles and E-mails after the downloading is complete.

The Event is composed in every case of the Mutex and the real Eventnames.

Note: Client-connections to local servers do not count as an "active task" here.

Examples of the practical use:

Perl:

    use Win32::Event;
    $evtHamsterIsIdle = Win32::Event->open(Mutex+"evtHamster.IsIdle");
    # start Hamster-tasks
    $evtHamsterIsIdle->wait();

Visual Basic:

    Private Const INFINITE = &HFFFF
    Private Const SYNCHRONIZE = &H100000

    Private Declare Function OpenEvent Lib "kernel32" Alias "OpenEventA" _
       (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
       ByVal lpName As String) As Long
    Private Declare Function WaitForSingleObject Lib "kernel32" _
       (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" _
       (ByVal hObject As Long) As Long

    Dim evtHamsterIsIdle As Long, res As Long
    evtHamsterIsIdle = OpenEvent(SYNCHRONIZE, False, Mutex+"evtHamster.IsIdle")
    ' start Hamster-tasks
    res = WaitForSingleObject(evtHamsterIsIdle, INFINITE)
    res = CloseHandle(evtHamsterIsIdle)

Delphi:

    uses Windows;
    var evtHamsterIsIdle: THandle;
    evtHamsterIsIdle := OpenEvent(SYNCHRONIZE, False, Mutex+'evtHamster.IsIdle' );
    // start Hamster-tasks
    WaitForSingleObject( evtHamsterIsIdle, INFINITE );
    CloseHandle( evtHamsterIsIdle );

Source: C:\AA\Src20020607\EnHlp\html\tech2jlc.htm - (86)


Hamster-Mutex-Objects

Hamster-Mutex-Objects (Win32)

Translated by Obbe-Jan Bakker

The mutex-object "mutexHamster.App.*" is used to prevent additional instances of Hamster from running in the same path.

It is locked when a Hamster-instance is started and released when it is closed again. If the mutex can't be locked on startup, the additional instance will not start.

It may also be used to test, if a given Hamster is already running.

The current Mutex can be determined by COM/OLE-INTERFACE with the function ControlGetProcessIdentifier.

Format:

"MutexHamster.App." + (Hamster.exe incl. full path information)

The path- and filename are converted to lowercase and all characters except "a"-"z" and "0"-"9" are replaced by the underscore "_".

Examples:

Program: C:\Program Files\News\Hamster.exe

Mutex-name: mutexHamster.App.c__program_files_news_hamster_exe

Program: \\Server\C$\News\Hamster.exe

Mutex-name: mutexHamster.App.__server_c__news_hamster_exe

Source: C:\AA\Src20020607\EnHlp\html\tech2mr4.htm - (87)


Automation (OLE) Interface to other programs

Automation (OLE) OLE-interface for other programs

Translated by Heiko Studt

Use Hamster's automation-server:

To use Hamster by automation (OLE/COM/DCOM), create an automation-object with classname "Hamster.App".

Examples:

Perl:

  use Win32::OLE;
  my $Hamster = Win32::OLE->new("Hamster.App");
  print $Hamster->ControlGetInfo;
  undef $Hamster;

VBScript (Windows Script Host):

  Set Hamster = Wscript.CreateObject( "Hamster.App" )
  Wscript.Echo Hamster.ControlGetInfo
  Wscript.DisconnectObject Hamster

Visual Basic:

  Dim Hamster as Object
  Set Hamster = CreateObject( "Hamster.App" )
  MsgBox Hamster.ControlGetInfo
  Set Hamster = Nothing

Delphi:

  uses comobj;
  var Hamster: Variant;
  Hamster := CreateOleObject( 'Hamster.App' );
  writeln( Hamster.ControlGetInfo );
  Hamster := Unassigned;

Misc.-functions:

ControlGetInfo: String

Retrieves a line of text containing the Hamster-version and -path (for "Hello World!"-purposes ...).

ControlGetPath: String

Retrieves the path of the currently registered and used automation-server (i.e. path to last used "Hamster.exe")

ControlGetHscPath: String,       scripts
ControlGetLogsPath: String,      log-files
ControlGetServerPath: String,    server
ControlGetGroupsPath: String,    groups
ControlGetMailsPath: String,     mails
ControlGetNewsOutPath: String,   news-outbox
ControlGetNewsErrPath: String,   posting-errors
ControlGetMailsOutPath: String   mail-outbox
ControlGetHsmPath: String        script-modules

Retrieves the absolute path (eg "c:\hamster\scripts\") for the appropriate functions.

ControlGetVersion: String

Retrieves the Hamster-versionnumber as a string ("1.3.0.16").

ControlGetProcessIdentifier

Returns the Mutex-string of the currently running Hamster.

Return value: String

ControlSetLogin(Identifier, Username, Password: String)

Temporarily sets username and password for the given Identifier, which can be either the name of a RAS-connection or the name of a news-/mail-server. The value of Identifier must exactly match, incl. case. "Temporarily" means, that this setting is not saved to a file but is kept in memory until Hamster is closed again.

If username and/or password is set to a single question-mark ("?"), Hamster will ask for the value when it's needed.

Furthermore, one of the stored ""general-purpose"-passwords can be selected here to avoid noting it in clear-text in the script.

ControlSetLogin("serv.er", "$1", "")

ControlMessage(Message, Param: Integer): Integer

Initiates some Hamster-functions, which are also available and accessible by menu-items.

Named values for <Message> are predefined in module hamster.hsm:

HAM_MSG_HAMSTER_EXIT    = 1
HAM_MSG_RESET_COUNTERS  = 2
HAM_MSG_LOCALNNTP_ONOFF = 3
HAM_MSG_LOCALPOP3_ONOFF = 4
HAM_MSG_LOCALSMTP_ONOFF = 5
HAM_MSG_LOCALIMAP_ONOFF = 14
HAM_MSG_LOCALRECO_ONOFF = 11
HAM_MSG_SHOWWINDOW      = 6
HAM_MSG_SHOWICON        = 7
HAM_MSG_STOPALLTASKS    = 8
HAM_MSG_RELOADCONFIG    = 9
HAM_MSG_RELOADIPACCESS  = 10
HAM_MSG_DIRS            = 12
HAM_MSG_SCRIPTS         = 13
HAM_MSG_NEWSKILLFILELOG = 15
HAM_MSG_PULLNEWGROUPS   = 16

The allowed values and interpretation of the parameter Param depends on the type of Message.

Message Parameters     purpose

 1    delay-time       Exit Hamster, param is delay time in millisec before Hamster terminates
 2    0,1,2 or 3       Reset counters and log, 0=counters+Log 1=counters 2=Log 3=errorlog
 3  0=Stop, 1=Start    Start/Stop local NNTP-server
 4  0=Stop, 1=Start    Start/Stop local POP3-server
 5  0=Stop, 1=Start    Start/Stop local SMTP-server
14  0=Stop, 1=Start    Start/Stop local IMAP-server
11  0=Stop, 1=Start    Start/Stop local Remote-Control-Server
 6  0=Hide, 1=Show     Hide/show main-window
 7  0=Hide, 1=Show     Hide/show tray-icon
 8     ignored         Menu: Online/Stop all tasks
 9  0=Test             Test if configuration-dialog is open
 9          1=Load     Reload configuration (hamster.ini, Malias.hst)
10     ignored         Reload IPAccess.hst
12  0=Close 1=Open     Close/Open the "Edit Dir(s)" browser-dialog for the mail/news folders
12     2=Status        Return the status of the "Edit Dir(s)" browser-dialog (1=open, 0=closed)
13  0=Close 1=Open     Close/Open the "Edit Scripts/modules" dialog
13     2=Status        Return the status of the "Edit Scripts/modules" dialog (1=open, 0=closed)
15  0=Close 1=Open     Close/Open the "News-/Killfile-Log" dialog
-                      (1 opens and waits until closed, 0 closes if open)
15     2=Status        Return the status of the "News-Killfile-Log" dialog (1=open, 0=closed)
16          1=Open     Open the "Add News-Pull" dialog

Return-values:

0  OK; command executed.
1  Error; command failed.
2  Unknown parameter.
3  GPF, please reboot ... ;-)(floating point error)

Note: The function ControlMessage(1,0) is a "hack", because the COM-model normally doesn't allow to shut down a client's server, if the client had not activated the server. The variable PARAM can go from 100 to 32600 ms. In this time client has to interrupt his connection to server. All PARAMs smaller than 100 would be changed into 100.

Remark to Message=9: The function ControlMessage(9,1) only reloads the configuration, if all configuration-windows are closed. (result: 1/True) The function ControlMessage(9,0) only get the result. It does *not* reload configuration! It's only implemented to see, if ControlMessage(9,1) is possible. (of course it says also if configuration is closed)

ControlGetStatus( Status, Parameter: Integer): Integer

Gives as result the current status of Hamster

ControlGetStatus(1,n) reports status of a local server.

With n:
1=local NNTP-server
2=local POP3-server
3=local SMTP-server
4=local IMAP-server

Returnvalue: Numeric 1 if the server is active. ControlGetStatus(2,n) reports the number of open connections to a local server.

With n:
1=local NNTP-server
2=local POP3-server
3=local SMTP-server
4=local IMAP-server

Returnvalue: The number of open connections to the server. ControlGetStatus(3,n) reports count of incoming and waiting News & Mails

With n:
1=new articles,
2=loaded articles,
3=known (History-filtered) articles,
4=deleted articles,
5=articles to send,
6=new e-mails,
7=e-mails to send,
8=Number of articles loaded by message-id,
9=Number of error-lines in the log,
10=Number of warning-lines in the log.

Returnvalue: The number of mails/articles of the type specified by the parameter. ControlGetStatus(4,n) returns the currently set level of log-reporting.

With n:
1 : Loglevel View in logwindow
2 : Loglevel Save to logfile

Predefined values:

LOGID_ERROR     = $8000;
LOGID_WARN      = $4000;
LOGID_SYSTEM    = $0800;
LOGID_INFO      = $0080;
LOGID_DETAIL    = $0040;
LOGID_DEBUG     = $0008;
LOGID_STATUS    = $0004;
LOGID_FULL      = $0001;

Returnvalue: An XOR-calculation of the values currently set for the requested loglevel.

ControlRunScript (Scriptname,Scriptparameter:String; Wait:Bool):Integer

Starts a hs2-script. With parameter <wait> you can let Hamster wait until the end of this script, to result. The started script can use "Scriptparameter" with paramstr and paramcount. The Result is unused. There is more help for hs2-command RunScript available.

Note: The OLE-Server blocks and slows reactions of Hamster down (especially in the main window). If you have "Wait=true" the main window (eg menus) couldn't be used. If possible this option should be "false".

ControlAddLog (String:String; x:Integer)

Add a text into the log.

Parameter x represents the type of log entry, the 'status':

1=Debug
2=Detail
3=Info
4=System
5=Warning
6=Error

ControlRotatelog

Starts a new logfile and renames the previous logfiles(number plus 1).

ControlChangePassword(AccountName, OldPW, NewPW:String): Integer

Changes the password for a local user:

Returnvalue:
0 = Error in the old password
1 = Password changed
2 = password not changed

Task-functions:

ControlIsIdle: Bool

Returns TRUE if there are currently no active tasks like purging, pulling news, sending mails etc.

Note: Client-connections to local servers and running scripts do not count as "active tasks" here.

ControlWaitIdle(WaitTimeout: Integer): Bool

Const HAM_WAITIDLE_INFINITE = 0

Like ControlIsIdle above, but this functions additionally waits the given amount of milliseconds, if there are active tasks.

When called with WaitTimeout= HAM_WAITIDLE_INFINITE or 0, the function does not return until all tasks have finished.

Note: See "Events: evtHamster.IsIdleAgain" for a better approach to wait until Hamster becomes "idle" again.

Note: Client-connections to local servers and running scripts do not count as "active tasks" here.

ControlThreadCount: Integer

Gives the number of currently active tasks.

Note: Client-connections to local servers and running scripts do not count as "active tasks" here.

ControlFlush: Integer

Writes unsaved data to disk. Suggested after last article imported with NewsImport.

ControlRunPurge(PurgeOptions: Integer): Integer

Starts a purge-thread (i.e. the deletion of old data).

The bit-oriented parameter PurgeOptions describes, which old data should be deleted.

Const HAM_PURGEOPT_DOALL      = 0xFF
Const HAM_PURGEOPT_DONEWS     = 0x01
Const HAM_PURGEOPT_DOHISTORY  = 0x02
Const HAM_PURGEOPT_DOKILLS    = 0x04
Const HAM_PURGEOPT_DOMHISTORY = 0x08
Const HAM_PURGEOPT_MAILINLOG  = 0x10
Const HAM_PURGEOPT_MAILOUTLOG = 0x20
Const HAM_PURGEOPT_NEWSOUTLOG = 0x40
Const HAM_PURGEOPT_RASDIALLOG = 0x80

bit0=1 : articles
bit1=2 : history-entries
bit2=4 : killfile-log
bit3=8 : mailhistory-entries

Returnvalue: 0=OK purge started, value <> 0 purge not started.

ControlRunPurgeGroup(GroupName: String): Integer

With this function the purge-thread runs only for specified groups.

Returnvalue: 0=OK purge started, value <> 0 purge not started.

ControlRunRebuildHistory: Integer

Starts a thread, which deletes the current history-files (".\Groups\Hist*.dat") and rebuilds the history-files by adding the Message-IDs of all articles in all groups stored in Hamster.

Note: This may take some time with thousands of articles, so it should only be used, if it's really necessary! Be sure to wait until Hamster is idle again (e.g. with ControlWaitIdle)after calling this function, and stop the local servers temporarily!

Returnvalue: 0=OK, value <> 0 error

ControlRunRebuildGlobalLists( Options: Integer ): Integer

Starts a thread, which rebuilds some lists needed by Hamster (see "Menu: File / Rebuild global lists" for details). No Options yet, so always use 0.

Returnvalue: 0=OK, value <> 0 error

ControlRunMail(ServerList: String): Integer

Starts the thread, which first fetches new mails from the mailservers (SMTP+POP3) in Parameter and then sends out mails (if any).

If ServerList is set to an empty string (""), all POP3- and SMTP-servers defined in Hamster may be used. Otherwise, transfer is restricted to the given servers.

If used, the ServerList has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the Hamster-settings (i.e. servername + "," + port).

Returnvalue: 0=OK/started, value <> 0 error, not started

Example: "mail.aaa.com,pop3;mail.bbb.com,pop3;mail.aaa.com,smtp"

ControlRunFetchMail( Server, Port, User, Pass, DestUser: String): Integer

Starts a thread, which fetches mails from the given POP3-server (Server, Port).

If User and Pass are given, they will be used to login to the server, if they are both empty, the password-setting for the given server is used. Furthermore, one of the stored "general-purpose"-passwords can be used here to avoid noting it in clear-text in the script (User="$(number)", Pass="").

If DestUser is given, fetched mails will be stored in the mailbox of this user, "admin"-mailbox is used otherwise. The name may optionally be followed by a comma and an identifier, which determines the filter-section to use for the mails fetched with this commands (default is global filters only, i.e. "[*]"-section in MailfFilt.hst).

Returnvalue: 0=OK/started, value <> 0 error, not started

Examples:

ControlRunFetchMail( "pop3.serv.er", "", "$7", "", "admin, myfilter")
ControlRunFetchMail( "pop3.serv.er", "pop3", "", "", "" )
ControlRunFetchMail( "pop3.serv.er", "", "john.doe", "secret", "john" )
ControlRunFetchMail( "pop3.serv.er", "10110", "$7", "", "jane" )

ControlRunFetchMailTLS( Server, Port, User, Pass, Destuser: String; SSLMode, SSLVerify: SYSINT; SSLCaFile: String): Integer;

Starts a thread, which fetches mails from the given POP3-server (Server, Port).

For <username> and <password> one of the variables defined in menu Passwords can be used. For <filter> enter the local user to whom the e-mail must be send. Otherwise the user entered in Menu ”Configuration” configured users will be used. Additional to local users can with filter also an entry in the file Mailfilter file “Mailfilt.hst” be used, Otherwise also here the fall back is menu ”Configuration”.

The parameter <SSLMode> is an integer which represents if and how SSL/TLS will be used:

0 - SSL/TLS is switched off
1 - SSL on separate Port (sPOP3 or sSMTP)
2 - TLS, if possible
3 - TLS is required

The parameter <SSLVerify> is also an integer and determines the validation of external server certificates:

0 - Validation of certificate is switched off
1 - Validation of certificate if certificate available
2 - Always validate certificate
3 - Always validate certificate and compare servercertificate with local copy

With <SSLCaFile> (String) a file can be entered for the validation of certificates. This will overrule the default (Configuration SSL: "File with certificates for verification").

Attention! The use of SSL in combination with Hamster requires two additional DLL-files.

Download for example from: http://sites.inka.de/ximera/hamster.html#openssl-binaries

These links can also be found at the Hamster-archive at http://home.t-online.de/home/micha-wr/hamster/index.htm

Returnvalue: 1=OK/started, <>1=not started ??? todo check if 1=OK or 0=OK ???

ControlRunSendMail( Server, Port, FromSelection: String): Integer

Starts a thread, which sends mails to the given SMTP-server (Server, Port).

If no <FromSelection> is given, all mails waiting for delivery are sent. If a selection is given (regular expression), only mails with a matching Envelope-From are sent to this server.

Returnvalue: 0=OK, value <> 0 error

Examples:

ControlRunSendMail( "smtp1.serv.er", "smtp", "john\.doe@serv\.er" )
ControlRunSendMail( "smtp2.serv.er", "", "" )

ControlRunSendMailTLS( Server, Port, FromSelection: String; SSLMode, SSLVerify: SYSINT; SSLCaFile: String): Integer;

Starts a thread, which sends mails to the given SMTP-server (Server, Port).

If <FromSelection> is empty, all mails waiting for delivery are sent. If a selection is given (regular expression), only those E-Mails with a matching "Envelope-From"-header will be sent to the server.

The parameter <SSLMode> is an integer which represents if and how SSL/TLS will be used:

0 - SSL/TLS is switched off
1 - SSL on separate Port (sPOP3 or sSMTP)
2 - TLS, if possible
3 - TLS is required

The parameter <SSLVerify> is also an integer and determines the validation of external server certificates:

0 - Validation of certificate is switched off
1 - Validation of certificate if certificate available
2 - Always validate certificate
3 - Always validate certificate and compare servercertificate with local copy

With <SSLCaFile> (String) a file can be entered for the validation of certificates. This will overrule the default (Configuration SSL: "File with certificates for verification").

Attention! The use of SSL in combination with Hamster requires two additional DLL-files.

Download for example from: http://sites.inka.de/ximera/hamster.html#openssl-binaries

These links can also be found at the Hamster-archive at http://home.t-online.de/home/micha-wr/hamster/index.htm

Returnvalue: 1=OK/started, <>1=not started ??? todo check if 1=OK or 0=OK ???

ControlRunSendMailAuth( Server, Port, User, Pass, FromSelection: String): Integer

Like ControlRunSendMail above, but additionally allows to provide username and password used for authentication (SMTP-AUTH).

If <FromSelection> is empty, all mails waiting for delivery are sent. If a selection is given (regular expression), only those E-Mails with a matching "Envelope-From"-header will be sent to the server.

Note: Username and password are ignored, if SMTP authentication is not enabled for the given server (see notes on SMTP Auth under "Mailserver").

Returnvalue: 0=OK/started, value <> 0 error, not started

Example:

ControlRunSendMailAuth( "smtp3.serv.er", "smtp", "$42", "", "@smtp3.serv.er" )

ControlRunSendMailAuthTLS( Server, Port, User, Pass, FromSelection: String; SSLMode, SSLVerify: SYSINT; SSLCaFile: String): Integer;

Starts a thread, which sends mails to the given SMTP-server (Server, Port) with use of SMTP-AUTH verification. If <FromSelection> is empty, all mails waiting for delivery are sent. If a selection is given (regular expression), only those E-Mails with a matching "Envelope-From"-header will be sent to the server.

The parameter <SSLMode> is an integer which represents if and how SSL/TLS will be used:

0 - SSL/TLS is switched off
1 - SSL on separate Port (sPOP3 or sSMTP)
2 - TLS, if possible
3 - TLS is required

The parameter <SSLVerify> is also an integer anddetermines the validation of external server certificates:

0 - Validation of certificate is switched off
1 - Validation of certificate if certificate available
2 - Always validate certificate
3 - Always validate certificate and compare servercertificate with local copy

With <SSLCaFile> (String) a file can be entered for the validation of certificates. This will overrule the default (Configuration SSL: "File with certificates for verification").

Attention! The use of SSL in combination with Hamster requires two additional DLL-files.

Download for example from: http://sites.inka.de/ximera/hamster.html#openssl-binaries

These links can also be found at the Hamster-archive at http://home.t-online.de/home/micha-wr/hamster/index.htm

Returnvalue: 1=OK/started, <>1=not started ??? todo check if 1=OK or 0=OK ???

ControlNewMail( EnvelopeFrom, EnvelopeTo, Mailtext: String )

With this function, a new E-Mail is generated. For <EnvelopeFrom>, the E-Mail-address of the sender and/or the name of the Accounts must be entered. <EnvelopeTo> must contain the E-Mail-address and/or the Accountname of the receiver, multiple receivers can be entered, separated by ”;”. <Mailtext> must contain the complete E-Mail in one parameter, therefore with Mailheaders and Body corresponding to the standards RFC2881/RFC2882.

When using this command, be sure to test your script thoroughly and at first locally, before sending these script-generated E-Mail to the Internet.

Return value: 0, if the E-Mail could be saved according to the rules, otherwise -1.

ControlRunNewsPost(ServerList: String): Integer

Starts the thread, which posts new articles (if any).

If ServerList is set to an empty string (""), all NNTP-servers defined in Hamster may be used. Otherwise, transfer is restricted to the given servers (see ControlRunMail for details on the ServerList-format).

Note: Starting with Hamster Vr. 1.3.19, this function was replaced with the NewsJobs*-functions described below and is only simulated internally with these new functions. See the example at "NewsJobsStart" for a replacement of this obsolete function.

Returnvalue: 0=OK, value <> 0 error

ControlRunNewsPull(ServerList: String): Integer

Starts the threads, which pull new articles from newsservers.

If ServerList is set to an empty string (""), all NNTP-servers defined in Hamster may be used. Otherwise, transfer is restricted to the given servers (see ControlRunMail for details on the ServerList-format).

Note: Starting with Hamster Vr. 1.3.19, this function was replaced with the NewsJobs*-functions described below and is only simulated internally with these new functions. See the example at "NewsJobsStart" for a replacement of this obsolete function.

Returnvalue: 0=OK/started, value <> 0 error/not started

NewsJobsClear: Integer

Clear the task-list.

NewsJobsPullDef(ServerList: String): Integer

Add all pull-tasks of the servers "ServerList" into the task-list.

If "ServerList" is empty all servers would be selected automatically.

NewsJobsPostDef(ServerList: String): Integer

Add all post-tasks of the servers "ServerList" into the task-list.

If "ServerList" is empty all servers would be selected automatically.

NewsJobsPull(Servername, reGrpSelect: String): Integer

Add those pull-tasks which are selected by "Servername" and reGrpSelect to the task-list.

If "reGrpSelect" is empty all groups of the server would be selected automatically.

Note: reGrpSelect is a regular expression (RegEx).

NewsJobsPost(Servername, reGrpSelect, reMsgSelect: String): Integer

Add those post-tasks which are selected by "Servername" and reGrpSelect to the task-list.

If "reGrpSelect" is empty all groups would be selected automatically.

Note: reGrpSelect and reMsgSelect are regular expressiona (RegEx).

Only those articles whose headers match on "reMsgSelect" will be sent.

NewsJobsFeed( server, reGrpSelect: string ) : Integer

Add those tasks to the task-list, used to feed those servers and groups matching to <server> and <reGrpSelect>.

If "reGrpSelect" is empty all groups will be selected automatically.

Note: reGrpSelect is a regular expression (RegEx).

Warning! This function should *only* be used for exchanging articles between servers, not for getting articles from the provider!

This function uses the IHAVE command as defined in RFC977.

Result: <0:Error; >=0: Number of of added Newstasks

Examples:

NewsJobsFeed( "one.newsserv.er" )
NewsJobsFeed( "two.newsserv.er", "^alt\." )

NewsJobsStart(ServerList: String): Integer

Start processing the joblist for the servers in the parameter "ServerList".

If the parameter "ServerList" is empty all servers are automatically selected and added to the joblist.

ControlNewsJobsGetCounter: Integer

Give as result the number of tasks in th jobslist.

Result: Integer

ControlNewsJobsGetServer(index:Integer) : String

Give as result the servername of the task selected by index.

Result: String

ControlNewsJobsGetParam(index:Integer) : String

Gives as result the parameter of the task selected by index.

The parameter is dependent on the type of task.

Result: String

ControlNewsJobsGetType(index:Integer) : Integer

Gives as result the type of the task selected by index.

Result: Integer

Task-types:

JOBTYPE_INVALID  = 0
JOBTYPE_SRVINFOS = 1
JOBTYPE_NEWSPOST = 2
JOBTYPE_GETBYMID = 3
JOBTYPE_NEWSPULL = 4
JOBTYPE_NEWSFEED.= 5

ControlNewsJobsGetPriority(index:Integer) : Integer

Gives as result the priority of the task selected by index.

Result: Integer

Some pre-defined values are:

Type= 1; JOBPRIO_SRVINFOS = MaxInt - 1;
Type= 2; JOBPRIO_NEWSPOST = MaxInt - 2;
Type= 3; JOBPRIO_GETBYMID = MaxInt - 3;
Type= 4; JOBPRIO_NEWSPULL : priority is the number of articles in the local group
Type= 5; JOBPRIO_NEWSFEED = MaxInt - 4;

ControlNewsJobsSetPriority( index, new_priority:Integer ) : Integer

Change the priority of the task selected by index in the newsjobs-queue.

Result: Integer

Pre-defined values for the <new_priority>:

$JOBPRIO_SRVINFOS = 2147483646
$JOBPRIO_NEWSPOST = 2147483645
$JOBPRIO_GETBYMID = 2147483644

ControlNewsJobsAdd ( server:String, type:Integer, parameter:String, priority:integer ): Integer

Add a task to the task-list.

"Server" and "Parameter" must be strings.

"Type" and "Priority" must be numeric.

Result: Integer

Pre-defined values for <priority>:

$JOBPRIO_SRVINFOS = 2147483646
$JOBPRIO_NEWSPOST = 2147483645
$JOBPRIO_GETBYMID = 2147483644
$JOBPRIO_NEWSFEED = 2147483643

Example:

ControlNewsJobsAdd("news.wuff.de",4,"hamster.test",10000)

ControlNewsJobsDelete(index: Integer) : Integer

Delete the task at the position <index> in the task-list.

Result: 0

Example:

ControlNewsJobsDelete(2)

RAS-functions:

RasDial(ConnectionID, Username, Password: String): Bool

This function establishes the RAS-connection named <ConnectionID>.

The name must be identical (case-sensitive) to an entry in the phonebook for RAS-network. The <Username> and/or <Password> can be set to empty strings (""). In this case, the <ControlSetLogin>-setting (if any) or the values stored in Hamster are used to establish the connection.

If dialing was successful (i.e. a connection was established), the function returns TRUE, otherwise FALSE (use RasLastError to get additional information on the failure).

RasHangup

Closes the current RAS-connection, even if not established by RasDial.

RasIsConnected: Bool

Returns TRUE, if there's a valid RAS-connection established by RasDial.

RasLastError: Integer

Returns the last RAS-errorcode (especially when RasDial returned FALSE).

RasGetConnection: String

Returns the name of the current RAS-connection.

RasGetIP: String

Returns the IP-address of the current RAS-connection.

RasListEntries: String

Returns the names of all available RAS-connections.

News-functions:

NewsGrpCount: Integer

Retrieves the number of newsgroups available from Hamster.

NewsGrpName(GrpIdx: Integer): String

Retrieves the name of the given newsgroup.

Note: GrpIdx can be 0 to (NewsGrpCount-1).

NewsGrpNameByHandle(GrpHdl): String

Retrieves the name of the given newsgroup. GrpHdl can be any value returned by by NewsGrpOpen.

NewsGrpIndex(GrpName: String): Integer

Retrieves the index-number of the given groupname (-1 for unknown groups).

Note: the index-number can be 0 to (NewsGrpCount-1).

NewsGrpOpen(GrpName: String): Integer

Opens the given group and returns a handle (>=0), which is needed to retrieve additional infos in the functions below (the handle is referenced as GrpHdl there).

If the function fails, the return-value is negative (<0).

Note: If newsgroups are used/opened by script these groups must always explicitly be closed before the script is terminated. This is necessary because terminating the script and/or the HamsterObject does not automatically close the newsgroup and this will result in memory-leakage. These memory losses will accumulate on every run of the script and might crash your system.

NewsGrpClose(GrpHdl: Integer)

Close a previously opened group.

Note: If newsgroups are used/opened by script these groups must always explicitly be closed before the script is terminated. This is necessary because terminating the script and/or the HamsterObject does not automatically close the newsgroup and this will result in memory-leakage. These memory losses will accumulate on every run of the script and might crash your system.

ControlAddGroup (GroupName: String)

Creates a new local group with the name <GroupName>.

Return value: 0=OK/created, -1=not created

ControlAddGroup(“Test”)

ControlDelGroup (Groupname: String)

Deletes the local group with the name <GroupName>.

Return value: 0=OK/deleted, -1=not deleted

ControlDelGroup(“Test”)

ControlAddPull (Server, GroupName: String)

Adds a new newspull. If the group for this pull does not exist, than it will be automatically created.

Return value: 0=OK/pull added, -1=pull not added

ControlAddPull (“news.xxx.de”,“Test”)

ControlDelPull (Server, GroupName: String)

Deletes a newspull.

Return value: 0=OK/deleted, -1=not deleted

ControlDelPull (“news.xxx.de”,“Test”)

NewsGrpXOver(GroupHdl, Begin, End) : string

This function gives back the XOvers of articles from <Begin> to <end> from the group <GroupHdl>.

Every XOver is given in one Line for every article.

It's given by changing CR/LF/Tabs (#10/#13/#9) to ' ' (#32) and the fields are separated by #9 (Tab).

The elements of such a line are in the this order:

Articlenumber
Subject
From
Date
Message-ID
References
Articlesize
Lines
X-Ref
X-Hamster-Info

NewsGrpInformation(GrpHdl: Integer) : String

This function gives as result some information about the newsgroup "GrpHdl".

It's send like "XOver" (changing CR/LF/Tabs (#10/#13/#9) to ' ' (#32) and separating them with #9 (Tab)).

These is the information that is given in this order:

Description
pull.limit
purge.articles.keepdays
postserver
type
pullserver
GroupName

NewsArtCount(GrpHdl: Integer): Integer

Retrieves the number of available articles in the group.

NewsArtNoMin(GrpHdl: Integer): Integer

Retrieve the lowest available article-number.

NewsArtNoMax(GrpHdl: Integer): Integer

Retrieve the highest available article-number.

NewsArtText(GrpHdl, ArtNo: Integer): String

Retrieves the text for the given article-number.

An empty string indicates, that the article is not available any more.

NewsArtTextExport(GrpHdl, ArtNo: Integer): String

Same as NewsArtText, but the text is converted to export-format.

Retrieves the text including headers for the given article-number, converted to export-format.

This export-format is the widely supported MBox-Format.

That is, the article itself is preceded by an extra line with some info collected from the article-headers.

An empty string indicates, that the article is not available any more.

NewsArtXOver(GroupHdl, Articlenumber) : string

This function gives back the XOver of the article <Articlenumber> in the group <GroupHdl>.

The XOver is given in one Line.

It's given by changing CR/LF/Tabs (#10/#13/#9) to ' ' (#32) and the fields are separated by #9 (Tab).

The elements of the resulting line are in the this order:

Articlenumber
Subject
From
Date
Message-ID
References
Articlesize
Lines
X-Ref
X-Hamster-Info

NewsScoreListFor(GrpName: String): String

Retrieves a list containing all score-entries, which will be used when pulling news for the given groupname.

NewsScoreTest(GrpName, ArtText: String; var MatchLog: String): Integer;

Returns the scorevalue for the given article (ArtText). The test is done with the assumption, that the article was pulled from the given newsgroup (GrpName).

A CR/LF-separated list of all matching scorelines is returned in <matchlog>.

NewsLocateMID(MessageID: String; var Groupname: String; var ArtNo: Integer): Bool;

Returns TRUE, if the given Message-ID is [still] saved in the history-file.

In this case, <Groupname> and <ArtNo> will be set to point to this article.

Otherwise the function returns FALSE and Groupname and article-number remain unchanged.

Note: Now the MID will be pulled by MID at the next pull.

NewsLocateMID2(MessageID: String; var Groupname: Variant; var ArtNo: Variant): Bool;

This function is the same as "NewsLocateMid" above, but with Variant-parameters.

Use this version in VBS/WSH-scripts (Visual Basic script resp. Windows Scripting Host).

NewsDeleteByMID(MessageID: String): Bool;

Locates the article identified by the given Message-ID and deletes it in Hamster's database-files. The function returns TRUE, if article could be located and deleted; FALSE otherwise.

NewsImport(ArtText, OverrideGroups: String; IgnoreHistory, MarkNoArchive: Bool): Bool;

Imports the given article into Hamster's database and returns TRUE, if the article was imported, FALSE otherwise.

The parameter <ArtText> must contain the article to import, including all headers, header/body-separator and the article-body. The lines have to be separated by CR+LF (0x0d, 0x0a).

The article must contain a least a Date-, From- and Subject-header.

If the parameter <OverrideGroups> is empty, the Newsgroups-Header is required. This "Newsgroups:"-header determines in which group(s) the article will be stored. Otherwise it is only stored in the group given by <OverrideGroups>. If no valid local groups are given, the article will be stored in the appropriate internal group, default "internal.misc".

If <IgnoreHistory> is TRUE, no history-lookup is made for the Message-ID of the imported article, so it will be imported even if it's already known. Note: This can cause duplicate articles.

If <MarkNoArchive> is TRUE, the imported article is marked with "NoArchive=1" in the "X-Hamster-Info:"-header. This flag might be used to mark the imported article as "temporary", so it can, for example, be ignored by appropriate archiving-software [not available yet ;-)].

After importing articles it is recommended to call the function ControlFlush to ensure all data is written to disc (articles, history).

Self-defined statusline variables:

Besides the variables for statusline with fixed meaning there are variables available without special meaning.

These can be shown in the statusline of Hamster with the wildcards %X0 to %X9.

Example: Such a counter can be used as progress-indicator of a running script.

There are several functions available for use and maintenance of these variables.

XCounter (Number)

Returns the value of the statusline variable <Number>.

ClearXCounter(Number, until_Number)

ClearXCounter(Number)

Resets the value of the statusline variables <Number> up to <until_Number>.

SetXCounter (Number, Value)

Changes the value of the statusline variable <Number> to <Value>.

DecXCounter (Number, Value)

DecXCounter (Number)

Decreases the value of the statusline variable <Number> with the amount <Value>.

IncXCounter (Number, Value)

IncXCounter (Number)

Increases the value of the statusline variable <Number> with the amount <Value>.

Source: C:\AA\Src20020607\EnHlp\html\tech82pc.htm - (88)


Directory structure

Files and directories

Translated by Obbe-Jan Bakker

Directory overview:

(Main folder)
     |
     |
     +-- Server
     |     |
     |     +-- (Server names)
     |
     +-- Groups
     |     |
     |     +-- News.Out
     |     |
     |     +-- (News group names)
     |
     +-- Mails
     |     |
     |     +-- Mail.Out
     |     |
     |     +-- Admin
     |     |
     |     +-- (User names)
     |
     +-- Logs

(Note: starting with version 1.3.21.0 the paths can be changed per hamster.ini, section [Directories].

The paths for scripts/modules can also be set in menu "Script / Manage scripts and modules... / tab: General".

Script-authors should therefore use the corresponding OLE/hs2-Functions and no longer use fixed paths.)

Source: C:\AA\Src20020607\EnHlp\html\file3oz4.htm - (89)


Files in the Logs folder

Files in the " (main folder) \ Logs "

Translated by Obbe-Jan Bakker

0.log, 1.log, 2.log, ...

Hamster's session-log files. Each time Hamster is started, the files are shifted up by 1 (0.log->1.log, 1.log->2.log, ...).

"0.log" is always the most current logfiles.

MailIn.log

Protocol for incoming E-mail from POP3-servers.

Contains info for each mail, fetched from external POP3-servers.

MailOut.log

Protocol for E-mail sent to SMTP-servers.

Contains info for each mail, sent to external SMTP-servers.

RasDial.log

Protocol over the RAS-network connections produced by the hamster.

Contains an entry for each dial-up connection initiated by Hamster.

Source: C:\AA\Src20020607\EnHlp\html\file3s6o.htm - (90)


Overview

Files in the " (main folder) "

Translated by Heiko Studt

Note: Since Hamster–Version 1.3.21 paths are adjustable by Hamster.ini. Script-authors should use the corresponding hs2-/OLE-functions and not hardcoded (default) paths.

Filename	Description
Hamster.exe	The executable main file.
Hamster.ini	In this file Hamster stores many settings, as far as they are not server-specific or have more complex construction which justifies own file. This file is produced by the first hamster's start.
Hamster.hlp	Hamster's English help file. (This :-))
Hamster_??.hlp Hamster_??.cnt	Non-english helpfile. The two questionmarks are placeholders for the two-character country-identification. Non-english contents-file for Hamster_??.hlp Example: Hamster's German help file : Hamster_de.hlp and Hamster_de.cnt
Hamster_??.dat	Language files; The two questionmarks are placeholders for the two-character country-identification. English (?? =en) and German (?? =de) are included in the distribution.
Changes_??.txt	Version history files; The two questionmarks are placeholders for the two-character country-identification. English (?? =en) and German (?? =de) are included in the distribution.
Changes.txt	Version-history in English. No longer used, can be deleted.
Aenderungen.txt	Version-history in German - since version 1.3.21.xx. No longer used, can be deleted.
HamsterCmds.dat	Hamster's English script-commands list, used with INSERT in hs2-shell and Hamsters internal script-editor.
HamsterCmds_??.dat	Non-english script-commands list. The two questionmarks are placeholders for the two-character country-identification. Example: Hamster's German script-commands liste : HamsterCmds_de.dat
Groups.hst	List of all Hamster's newsgroups.
Pulls.hst	List of the pulls of newsgroups.
Server.hst, SrvPOP3.hst, SrvSMTP.hst	List of NNTP-/ POP3-and SMTP-server.
Password.!!!	Password storage file.
Accounts.!!!	Local users.
IPAccess.hst	Access authorizations on IP-basis, normally allows local access, by default access from the local network and if you change it also from the Internet.
Scores.hst	Score file for news, allows to skip loading articles based on the so-called Overview-information (XOver). This file is not created automatically. Create and maintain by "Configuration | Edit special files | Edit News-score-/Killfile" and/or "Configuration | Killfile-Log/Settings: tab:scorefile".
MailFilt.hst	Filter file for E-mails, also allows distribution for several users based on specification in the mails and importing of mailing lists in corresponding local news groups. This file is not created automatically. Create and maintain by "Configuration | Edit special files | Edit mail-score-/Killfile".
MAlias.hst	File for redirecting of E-Mail-Addresses and creating of virtual E-mail-addresses.
Ham.exe	Commandline-tool (see also " Ham help " for details).
Ham.dat	Language-file for Ham.exe. Contains English and German text.
*.hsc, demo*.hsc	(Example) hamster-scripts. If the path for scripts and modules in the INI-file has been set to a non-default path, at least own scripts and modules should be copied to the corresponding path.
*.pl, demo*.pl	(Example) Perl-scripts
h*.hsm	Standard script-modules delivered with Hamster.    hamster.hsm    constants and hamrequired function    hwindows.hsm   windows-constants and RasErrText function    hstrings.hsm   constants and functions for string-handling (white-space)    htime.hsm      functions for time-handling    hmessage.hsm   functions for handling messages (news/mail) in lists Note: Do not change these modules. They might be overwritten/replaced with the next update!
*.vbs, demo*.vbs	(Example) VBScript-scripts (" Windows Scripting Host ")
Hamst_xy.ico	Hamster's icons in Tray (replaceable with own icon), Name: "Hamst_xy.ico",  x for "1" (no running Thread) or "2" (at least 1 Thread active)  y for "a" (everything ok), "b" (at least one warning) or "c" (at least one error)
Source: C:\AA\Src20020607\EnHlp\html\file3p0w.htm - (91)


Hamster.ini

File: %main Path%\Hamster.ini

Translated by Heiko Studt, updated by Obbe-Jan Bakker

This INI-file contains all essential hamster's-settings, provided that these are not Server/Group-specific or are stored in separate files on account of their complexity. The settings specified here can only partly be changed through the configuration menus of Hamster. Some settings can only be changed by directly editing this INI-file ("Configuration | Edit special files").

The INI-file is structured in different sections. Every section starts with the section-name in the format "[SectionName]", followed by the items of that section in the format "ItemName=value". The following sections are available

In this section it's possible to configure the tree of Hamster's folders freely. Changes could affect functionalities of older tools or scripts.

[Directories]

The section [Setup] is the general section for all settings not specifically grouped under a separate section.

[Setup]

The section [Main] contains settings for the visual aspects like colors and layout of the Hamster main-window.

[Main]

The section [Actions] contains settings to allow Hamster to start on specific internal events
an external program (e.g. KorrNews) and/or run a specific Hamster-script.

[Actions]

Furthermore there are several other sections.

[ScoreEdit] [Stats] {KillList] [Online-menu] [Marker] [SelPulls] [EditScripts] [EditDirs] [SSL] [DlgGroupSelect]

Legenda:

column: default value
** is no default itself. This means the default and/or additional info is explained under the column: description

column: menu
X = item can be changed by a menu-item in Hamster
- = item can only be changed in the ini-file

column: type
S = string, sometimes also a hexadecimal string (colors) or regular expression
I = integer, a whole number, usually only positive
    for more details on type, unit, range see description and context
    for example numeric dates are stored as integer in format YYYYMMDD
B = boolean, only two values allowed, 0 = false, 1 = true

Source: C:\AA\Src20020607\EnHlp\html\file41m8.htm - (92)


IPAccess.hst

File: (main folder) \ IPAccess.hst

Translated by Obbe-Jan Bakker

Attention! These settings are security-related. Only change these settings if you are fully aware of the consequences of your changes!

See also the FAQ:"Hamster and security".

The purpose of the file IPAccess.hst is to protect the Hamster from unauthorized access from the Internet. This happens on the basis of the internet-address of connecting clients. It can be determined, which IP-address or range of addresses are accepted by Hamster and which to reject.

Format:

The file contains only Plain-text. Comments starting with "#" or semi-colon ";" may be added to enhance readability. Each definition-line consists of 3 to 4 elements (fields) separated by commas (",").

Syntax: <Server>, <Access-rights>, <IP-Address-range>

1.) <Server>

Scope.

This element describes, for which local servers this definition-line is valid. This permits a differentiation according to the offered services. For example, a line starting with "NNTP" only affects the local NNTP-Server, but not the POP3-/SMTP-servers. This also allows you to differentiate between incoming and outgoing mail.

Allowed keywords:

NNTP : Local NNTP-Server
POP3 : Local POP3-Server
SMTP : Local SMTP-Server
IMAP : Local IMAP-Server
RECO : Local RECO-Server
MAIL : Local POP3- and IMAP- and SMTP-Server (corresponds with POP3 plus SMTP plus IMAP)
ALL : All local servers (corresponds with NNTP plus MAIL and RECO)

2.) <Access rights>

This element describes, if a client can connect to the given local server(s) and which actions are allowed on it (permissions).

Allowed keywords:

RW : Allow Read/Write
WO : Allow Write-Only
RO : Allow Read-Only
NA : No Access

3/4.) <IP-Address-range>

3.) <begin Range of IP-Addresses> (low address)

4.) <end Range of IP-Addresses> (high address)

IP-address-range or a single IP-address, for which this definition-line will be valid. If an address-range is defined, separate the low and high address with a comma. The high address may be omitted if it's only a setting for a single address.

Please note that the IP-address of the sender of an IP-packet can be forged. So this filter will not give a 100 % protection against intruders!

Special setting for local IP-addresses:

The special keyword "LOCAL" in field 3 tells Hamster, that all IP-addresses of the local computer should be treated like the address given in the 4th parameter. This setting is especially useful, if local addresses are assigned dynamically, e.g. address assigned by a DHCP-server or assigned by your provider on dial-up.

Fields 1 and 2 have no meaning in this case, but they have to be syntactically correct. In this special case Only the settings of parameter 4 will be used.

Example:

    # all local IP-addresses should be treated as 127.0.0.1:
    ALL, NA, LOCAL, 127.0.0.1

Implementation notes:

(*) The definition-list is only loaded once when starting Hamster, so you have to restart Hamster after editing the file.

(*) As Hamster is intended to be used "at home", the default-setting is to allow full access on all local servers for the IP-addresses 127.0.0.1 and 192.168.0.0 until 192.168.255.255. Furthermore, all local IP-addresses are treated like "127.0.0.1". This corresponds therefore to the following contents:

    ALL, RW, 127.0.0.1
    ALL, RW, 192.168.0.0, 192.168.255.255
    ALL, NA, LOCAL, 127.0.0.1

To change this behaviour, you have to create a file named "IPAccess.hst" in Hamster's root-directory and add at least one valid definition-line.

(*) The definition-list is tested from top to down and the first matching definition-line is used, and all further lines are ignored. If no definition-line matches, connection is refused.

Examples:

# treat all local IP-addresses like 127.0.0.1:
ALL, NA, LOCAL, 127.0.0.1

# full access to all servers for localhost:
ALL, RW, 127.0.0.1

# full access to all servers from all IP-addresses
$ in Intranet (= local network, LAN-stations):
ALL, RW, 192.168.0.0, 192.168.255.255

# full access to all servers from specific IP-addresses:
ALL, RW, 11.22.33.44  # John Doe
ALL, RW, 44.33.22.11  # Jane Doe

# readonly-access to the NNTP-server (news) from all IP-addresses:
NNTP, RO, 0.0.0.0, 255.255.255.255

# no access to any server from all IP-addresses:
# (reduces the usability of Hamster considerably, as far as there are
no previously defined exceptions for this rule...)
ALL, NA, 0.0.0.0, 255.255.255.255

Source: C:\AA\Src20020607\EnHlp\html\file3s4w.htm - (93)


Scores.hst

File: (main folder) \ Scores.hst

Translated by Obbe-Jan Bakker

The rules in file "Scores.hst" determine, which articles (news) will be loaded immediately, which will be logged in the Killfile-Log and which will be ignored completely when pulling new news.

Select your filter criteria very careful, otherwise you might lose possibly important messages. Therefore do not simply copy filters from other sources and use only filters whose contents, intentions, working and consequences you do fully understand.

This filtering is done with a technique called "scoring". In Hamster, this means, that each article starts with a score-value of zero and then gains or loses points if it matches one or more of the given score-rules. The final score-value then determines, if the article will be loaded. If the value is greater than or equal to zero (>=0), it will be loaded immediately. Otherwise (<0) it will not be loaded but saved in the Killfile-Log. To keep this logfile small and clear, you can further set a score-limit, which prevents log entries for articles with a "very low" score-value (default:–9999).

These killed and logged articles can be reviewed in menu "Configuration | Killfile-Log/-Settings...". From this view articles can be selected to be retrieved on the next pull.

Next follows first the formal syntax-overview, definition of the scorescope and allowed Score-rules, and than some examples of practical use of filters.

Syntax-Overview:

ScoreFile       = *( ScoreBlock / cEOL )
ScoreBlock      = ScoreScope *( ScoreRule / cEOL )

ScoreScope      = "[" ScopeGroupPattern *( 1*WSP ScopeGroupPattern ) "]" cEOL

ScopeGroupPattern = [?] [ "+" / "-" ] Pattern

ScoreRule       = ["="] ScoreValue 1*WSP ScoreSelection cEOL
ScoreValue      = ( "+" / "-" ) <Number>
ScoreSelection  = ScoreDefField 1*( 1*WHSP ScorePattern | ScoreExpire )
ScorePattern    = ["+"/"-"] [ "@" ScoreField ":" ] Pattern
ScoreExpire     = "Expire:" Date

Date = yyyymmdd

ScoreDefField   = [ "~" ] ScoreField

ScoreField      = ( "Number" / "Subject" / "From" / "Date" /
                    "Message-ID" / "References" / "Bytes" /
                    "Lines" / "Xref" / "Xpost" / "Age" ) [":"]

Pattern         = ( PatRegExp / PatSimple )

PatRegExp       = "{" <PCRE-style regex-pattern> "}"
PatSimple       = ( PatSimpleAll / PatSimpleText / PatSimpleNumber )
PatSimpleAll    = "*"
PatSimpleText   = """ <Text> """

PatSimpleNumber = "%" ( "<" / "=" / ">" ) *WSP <Number>

cEOL            = [ "#" <Comment> ] CRLF

Score-Scope :

Each section in the scorefile starts with a "[...]"-header describing the groupnames, for which the following score-lines should be tested. This makes it possible to use separate filter criteria for different groups and/or sub-hierarchies:

    [*]
    # score-lines for all groups

    [* -".announce"]
    # score-lines for all groups, except those containing the string ".announce"

    ["news" "usenet"]
    # score-lines for all groups containing or the string "news" or the string "usenet".

    [{^news\.} {^alt\.usenet\.}]
    # score-lines for all groups starting with the string "news." or the string "alt.usenet."

The patterns within "[...]" follow the same rules as the "Score-Patterns" described below.

Scoring an article before it is loaded from the server is limited to a few header-lines. Only after the article has been loaded all information is available and scoring can than be based on everything in the article, that is all headers and even the article body. A rule for filtering an article after loading must start with a questionmark at the beginning of the line.

Score Rules (tested BEFORE loading an article):

The score-value for a tested article is raised with "+"- and lowered with "-"-values:

    +100 subject "hamster"
    -100 subject "make money fast"

If a matching score-line is preceded with "=", the score-value is set to the given absolute value and no further tests will be made for this article:

    =+9999 from "my.mail@address"
    =-9999 from "spam.mail@address"

Of course in both situations the score-value will only be changed / set if the condition of the rule is fulfilled by the tested article.

The scoreable fields (before loading the articles) depend on the overview-information returned by the newsserver ("XOVER"). In most cases, the following fields are available for scoring: Subject, From, Date, Age, Message-ID, References, Bytes, Lines, Xref und Xpost.

Examples for the use with several different fields:

    +100 subject "hamster"
    -100 from {no.*spam}
    +500 message-id "my.unique.fqdn"
    +100 references "my.unique.fqdn"
    -100 bytes %>10000
    -100 lines %>250

The fictitious header-field Xpost is based on Xref and represents the number of groups, the article was crossposted to. This allows special scoring for crosspostings:

    [* -".announce"]
    -10 xpost %>2     # Articles posted to more than 2 groups are down-scored
    =-9999 xpost %>5  # Articles posted to more than 5 groups are kill-filed/ignored

Note! The Xref-header is dependent on the implementation of the remote server. The contents of this header depends on the groups carried by this server and so can be different from the contents of the newsgroups header.

The fictitious header-field Age is based on the field Date and represents the age of the article in days:

    =-9999 age %>14   # ignore all articles older than 14 days

If a fieldname is preceded with a tilde "~", the value of the given field is MIME-decoded before testing (decoding Umlauts). Because of perfomance-reasons only the windows-characterset is used in this decoding. This means that with some more exotic charactersets the correct recognition of special character is not guarantied. At the moment UTF-encoding is not supported (and very rare):

    +100 ~subject "hämstêr"
    -100 ~from "jürgen"

Example for a rule with an expiration date. The date must be entered in the format YYYYMMDD.

    =-9999 References: "<3ae1.de>" Expire:20010610 # generated on 16.05.2001

Score Rules (tested AFTER loading an article):

Before loading an article, only a reduced set of header lines can be tested (see previous section). After the article has been loaded, additional rules can be applied without this restriction. As all headers are available now, all of them (and even the body part of the message) can be tested.

Rules, that should be tested after the article was loaded, have to be marked with a leading question mark:

    ?+42 User-Agent "hamster"
    ?=-9999 Path "!known.spamm.er!not-for-mail"

Certainly, such rules cannot decide any more, if the article should be loaded, as it was already loaded. Their purpose is to decide, what to do with the loaded article.

Again, the score value starts with 0 and can be raised or lowered with such "?" rules. If the score value remains 0 or gets a value greater than 0, the article is stored in the database. But if the final score value becomes a value below 0, the article is not stored and is just dropped. So the main purpose for these special "?" rules is to get rid of really unwanted articles, that could not be detected by the normal rules described in previous section.

Besides the names of any header lines, you can also use some special names in "?" rules: These are the fictious fields "Header", "Body" and "Article". These three additional fields are not decoded (raw data as can be seen with 'view source' in most news/mail readers). The special function tilde “~“ for decoding headers can not be used on these special fields.

    ?+42 Header "hamster"
    ?+42 Body "hamster"
    ?+42 Article "hamster"

Header checks, if any header line matches the given patterns, Body checks all body lines and Article checks all header and all body lines.

Score Patterns:

Patterns without a leading plus "+"- or minus "-"-sign mean, that at least one or more of these patterns must match to make this rule apply:

    # "hamster" or "newsserver" or "mailserver"
    +1 subject "hamster" "newsserver" "mailserver"

Patterns with a leading "+"-sign mean, that the field has to contain this value to make this rule apply:

    # "hamster" in combination with "newsserver" or "mailserver"
    +1 subject +"hamster" "newsserver" "mailserver"

Patterns with a leading "-"-sign mean, that the field may not contain this value:

    # "newsserver" or "mailserver" not regarding "unix/linux/inn"
    +1 subject "newsserver" "mailserver" -"unix" -"linux" -"inn"

    # From-Header not containing "@"
    =-9999 from -"@"

To combine tests on different header-fields in a single score-line, you can qualify the pattern with the prefix "@Fieldname:":

       # downscore, if the Subject contains "help", "urgent" or "!!!",
       # except when the From-Field contains "my@address" or the Subject contains "SCNR"
    -1 subject "help" "urgent" "!!!" -@from:"my@address" -"SCNR"

If a score-pattern is placed within "{...}" instead of double quotes, it is treated as a PCRE-style regular expression[*] This makes it possible to create much more complex expressions and much more complicated rules:

        # Ignore those who want to be ignored: this catches for example
        # "From: nospam@nix", "From: no.spam.please@nada", "From: h.g.delete@this.gmx.de" ...
    -1 from {no.?spam} {(remove|delete|cut).*this}

[*]Perl-documentation for regular expressions can be found at:

http://www.perldoc.com/

http://parallel.fh-bielefeld.de/pv/studien/perl/node11.html

http://www.vvg.or.at/map/perlhelp.htm

An overview of syntax and explanation of Regular Expressions can be found at "Regular Expressions in Hamster."

More examples:

# A section starting with "[*]" contains global score-entries, which will be
# used for all groups:

[*]

# Load "my" articles immediately:
=+9999 From "Your Name"
=+9999 Message-ID your.unique.fqdn

# Load articles referencing one of "my" articles:
=+5000 References your.unique.fqdn

# Certainly, we are very interested in articles regarding these funny little
# animals with small antennas on the head:
=+1000 Subject hamster "HELP! THERE'S A BIG FAT RAT ON MY SCREEN!" "SCNR ;-)"

# And certainly, we ignore really silly suggestions such as:
=-1000 Subject "MAKE HAMSTER FAST!!!!"
# (please notice, that this entry would never match, as subjects containing
# "hamster" would match the "="-entry above)

# The examples below use group-specific score-entries by starting a new
# section in the scorefile with a "[...]"-line.
# As Hamster builds an "individual" scorelist for each group before loading
# articles for it, it is more effective to define "individual" filters, if
# score-entries are only needed for some of the groups.

# Filter out "big" articles, that do not have "FAQ" in subject and are not
# posted in an Announce/Info-group:

[* -announce -{infos?$}]
-10 Lines %>200
-10 Bytes %>10000
+20 Subject FAQ

# Ignore articles posted to more than three groups:
-10 Xpost %>3

# Ignore articles with subjects containing "!!!" in all groups except the
# newusers-groups:
[* -newuser]
-1 Subject "!!!"

# Some groups may be more readable, if you filter out all articles and
# only load specific ones immediately, e.g.:

[group.name.one group.name.two group.name.three]
-1 Message-ID *
+1 Subject "interest1" "interest2" "interest3" "interest4"
+1 From "user1" "user2" "user3" "user4"

# Example for filtering after the article has been loaded
?+10 Supersedes: *
?=-9999 Body: "Make Mony fast"

Source: C:\AA\Src20020607\EnHlp\html\file3vao.htm - (94)


MailFilt.hst

File: (main folder) \ MailFilt.hst

Translated by Paul Batchie

The rules in the file "MailFilt.hst" describe which E-mails should be loaded by the POP3 -Server and what has to happen to them.

Select your filter criteria very careful, otherwise you might lose possibly important messages. Therefore do not simply copy filters from other sources and use only filters whose contents, intentions, working and consequences you do fully understand.

1.) To load or not to load...

If the filter-file contains "Ignore" or "Kill" rules, Hamster first gets the headers of the E-mails and then decides which E-mails are deleted, completely loaded, or ignored. Each mail starts with "yes, it's ok to load it".

If an "ignore" rule in the file matches, the E-mail being tested is not loaded, but is left on the server.

If a "Kill" rule in the file matches, the E-mail being tested not only is not loaded, it also is deleted from the server.

If a "load" rule should apply, however, any previous Ignore/Kill rules become invalid, and the Email is loaded just like all remaining emails on which no rule applies.

For notification of the execution of "ignore" and "kill" rules, set a "notify" - instruction. Otherwise, ignoring and deleting takes place without comment.

With multiple "notify" - rules always just the actual last userlist is valid, the previous gets overwritten by the next one at that time.

This list itself can be killed completely with the rule "notifyoff", so that no information will be reported. If the "notify" - rule is used without parameter, then all messages will be send to the default-account.

With the additional instruction “Expire:YYYYMMDD“ rules can be changed to be temporary, that is to stop functioning after the specified expiration date. You can insert this condition at the end of the rule or between any elements of it, but it doesn't work after the beginning of a comment. The expire-entry must be separated from the other parts of the rule by a space.

Example: =Ignore() Expire:20031231 ~From: "John Doe"

Notification is good to use especially when testing rules.

As a precaution for losing messages start and test first with only Ignore rules.

Replace these later with Kill rules when you are sure all rules function properly.

Note: The POP Mailserver option "[X] Leave mails on server, i.e. do not delete them" (Configuration / mail settings & server) has a higher priority than filter-file rules, so even if a rule says "delete this mail", it won't be deleted if this setting is activated.

2.) Distribution of the email to local users

Every loaded E-mail is filed in the mailbox of at least of one user. A default user can be defined in the options of each separate POP3 Mailserver, with the global preset there being the "Admin" account.

The following Rules affect the local receiver's list:

- If an "Add" rule matches, the specified receiver(s) will be added to the recipient's list.

- If a "Del" rule matches, the specified recipient(s) will be removed from the recipient-list.

- If a "Set" rule matches, the recipient-list will be replaced by the given recipient(s).

- If a "postto"-rule matches, the given newsgroup(s) (local or remote) will be added to the newsgroups list to which the mail is posted.

  Hamster also sets the field "FollowUp-To: poster" automatically.

The "AddAccounts" checks if the given header field contains mail addresses known by Hamster. If a local mail-address is recognized (especially one of the "Local mail addresses" defined under "Local accounts"), the corresponding account is added to the recipient list.

If both the recipient list and the newsgroups list is still empty after all rules have been tested, the mail is not lost but is sent to a default account. This default account is the global default, "admin", unless another default user is specified by the last parameter of a fetchmail/ControlRunFetchMail script command, or by a "default" line in the filter-file.

Syntax-overview:

  MFilterFile     =  *( MFilterBlock / cEOL )
  MFilterBlock    =  MFilterScope *( MFilterRule / cEOL )
  MFilterScope    =  "[" ScopePattern *( 1*WSP ScopePattern ) "]" cEOL
  MFilterRule     =  ["="] ( MRuleLoad / MRuleDeliver ) [1*WSP Expire] cEOL

  MRuleLoad       =  "load"   [ "("             ")" ] 1*WSP MSelection
  MRuleLoad       =/ "ignore" [ "("             ")" ] 1*WSP MSelection
  MRuleLoad       =/ "kill"   [ "("             ")" ] 1*WSP MSelection
  MRuleLoad       =/ "notify" [ "(" AccountList ")" ]

  MRuleDeliver    =  "default"       "(" AccountList   ")"
  MRuleDeliver    =/ "addaccounts" [ "("               ")" ] 1*WSP MDefaultField
  MRuleDeliver    =/ "add"           "(" AccountList   ")"   1*WSP MSelection
  MRuleDeliver    =/ "set"           "(" AccountList   ")"   1*WSP MSelection
  MRuleDeliver    =/ "del"           "(" AccountList   ")"   1*WSP MSelection
  MRuleDeliver    =/ "postto"        "(" NewsgroupList ")"   1*WSP MSelection

  Expire          = "Expire:" Date

  Date  = ( Year Month Day ) / ( Year "-" Month "-" Day )

  Year  = 4DIGIT  ; fourdigit year (first two for century)
  Month = 2DIGIT  ; twodigit number of month
  Day   = 2DIGIT  ; twodigit day in month

  MSelection      = MDefaultField 1*( 1*WHSP MSelectPattern )

  MDefaultField   = *( "~" / "*" ) ( MSingleField / MGroupedField )
  MSingleField    = ( <Name of any header-field> / "Bytes" ) [ ":" ]
  MGroupedField   = ( "Any-Sender" / "Any-Recipient" )
  MSelectPattern  = [ "+" / "-" ] [ "@" MSingleField ":" ] Pattern

  AccountList     =  <account-name>   *( "," <account-name>   )
  NewsgroupList   =  <newsgroup-name> *( "," <newsgroup-name> )

  ScopePattern    = [ "+" / "-" ] Pattern

  Pattern         = ( PatRegExp / PatSimple )

  PatRegExp       = "{" <PCRE-style regex-pattern> "}"
  PatSimple       = ( PatSimpleAll / PatSimpleText / PatSimpleNumber )
  PatSimpleAll    = "*"
  PatSimpleText   = """ <Text> """
  PatSimpleNumber = "%" ( "<" / "=" / ">" ) *WSP <Number>

  cEOL            = [ "#" <Comment> ] CRLF

Filter-sections:

Every section is marked with square brackets " [...] ". They can contain a asterisk, "*", or a section name from a script command or from the menu settings for each of the POP3 -Mailservers. Short names for separate users can be set in the menu POP3-Mailserver.

 [*]
 # filter rule for all E-mails
 [Private]
 # filter rule for "private", e.g., identified by Script or menu
 [* -private]
 # filter-rules for all mails except those fetched with identifier "private"

Filter-rules:

Note: the following description contains mainly the differences between mail and news filters, so for further details see also Files: Scores.hst.

Unlike news-filters, each rule starts with a specific keyword followed by its parameters within parenthesis:

  kill()                   From: "well.known@spamm.er"
  add(john)                To:   "john@mail.serv.er"
  postto(hamster.ehamster) To:   "ehamster@onelist.com"

Important syntax note!: Between kill, add, postto, etc and the opening parenthesis NO blanks may exist, or the rule is invalid and considered nonexistent! Between the closing parenthesis and the search expression blanks on the contrary are allowed and are also recommended for clarity.

With a special field one can test an e-mail's length:

 ignore() Bytes: % >100000

The special field "Any-Sender" tests the send-specific Header: "From: ", "Apparently-From: ", "Sender: ", "Reply-To: ", "X-Sender: ", "Envelope-From: " and "X-Envelope-From: ".

 Load() Any-Sender: "boss@compa.ny" -@Subject:"cancellation!"

The special field "Any-Recipient" conversely tests the receiver-specific Header : "To: ", "Apparently-To: ", "CC: ", "BCC: ", "Envelope-To: " and "X-Envelope-To: ".

  add(John)     Any-Recipient: "john@mail.serv.er"
  add(Jane)     Any-Recipient: "jane@mail.serv.er"
  addaccounts() Any-Recipient:

If the field name is preceded with a tilde, "~", the value of the given field is MIME-decoded before testing. However, the considerations given under Scores.hst also apply here:

  load() ~To: "Jürgen"

Note: The MIME-Decoding of fields always decodes the entire filterline, and as such also decodes all fields in a filterline!

By default, only the first Header line of the given name is tested. If a fieldname is preceded with "*", all header-lines with this name are tested:

  add(john) *Received: "john@"

The special variable $xxx$ can be used for comparisons with other mail headers. And xxx stands for arbitrary Header of the mail to be tested:

  ignore() From: $TO$

Prefacing a rule with the "equals" sign, "=", makes that rule definitive. If a mail matches it, no further testing will be done on that mail.

Examples:

Deliver mails based on known local mail-addresses:

  [*]
  addaccounts() Any-Recipient:
  addaccounts() *Received:

Delete E-mails of known spammers or unwanted domains:

  [*]
  Kill() Any-Sender: "gross@spammer.com"
  Kill() Any-Sender: "@spammer.domain.net"
  =Ignore() Expire:20031231 ~From: "great troll"

Filter section for a certain user "auchwer". The name of the section, here [somebody], can be set in the menu POP3-Mailserver.

  [Somebody]
  postto(hamster.ml.usehamsternet) To: "usehamsternet@egroups.com"
  kill() From: "Fein_von_auchwer@domain.de"
  add(auchwer) To: "auchwer@gmx.de"

Inform the Admin account if e-mails were deleted:

  Notify(admin)

Notify, resp. notifyoff:

  [*]
   # Delete, but notify admin
   notify(admin)
   =kill() From: "a@b.com"

   # Delete without notification
   notifyoff()
   =kill() From: "well.known@spammer.com"

Send mail of Hamster mailinglists to local newsgroups, and a copy of each mail to "admin" (until you know if it works as expected ;):

  [*]
  postto(hamster.ml.usehamsternet) To: "usehamsternet@onelist.com"
  add(admin)                       To: "usehamsternet@onelist.com"
  postto(hamster.ml.ehamster) To: "ehamster@onelist.com"
  add(admin)                  To: "ehamster@onelist.com"

Delete all E-mail with identical From: and To: headers . As a rule, spam fits this, but caution: Newsletters and other desired email which can also contain identical From- and To-headers must be treated separately with a higher-priority rule.

  [*]
  Kill()  From: $To$

The same, but making sure the To-Header contains at least one mark:

  [*]
  # the To-Header contains at least one mark and is equal to the From-header
  kill()  From: $To$ +@To:{.+}

Note: the quantifier '+' in the addition '+@To:{.+}' actually is superfluous, but valuable for a good, fast understanding of the filter.

Ignore e-mails whose From: header contains a certain address and leave them on the server to read or otherwise later:

  [*]
  ignore()  From: "geschaeftsadresse@firma.de"

Source: C:\AA\Src20020607\EnHlp\html\file3ygg.htm - (95)


MAlias.hst

File: (mail folder) \ MAlias.hst

Translated by Obbe-Jan Bakker

This file contains a table of virtual and/or E-mail-addresses to be rerouted. All rerouting and/or virtual addresses must be itemized on separate lines. Every line must start with the E-mail-address to be rerouted and/or the virtual address. The to be rerouted E-mail-address and/or virtual E-mail-address must be followed by an "=" character, and then by the E-mail-address to which the E-mail must be rerouted and/or the E-mail-address which should receive the E-mail for the virtual account.

Lines starting with rhombus or the semicolon will be considered comment and are ignored.

Example:

# All at the local server incoming E-mail addressed to my.virtual@Address
# will be rerouted to the Admin.

my.virtual@Address=admin

# All at Account “admin“ incoming E-mail will be rerouted
# to realname@domain.de

admin=realname@domain.de

# All E-mail send to the Postmaster will be rerouted to the Admin.

postmaster=admin

Note:

All addresses to the right of the equality-sign "=" may be local addresses or removed E-mail addresses. Removed addresses are discarded by the internal Mailrouter of Hamster to the Mail.Out and will be sent on the next 'send mail' command.

In order to correctly be able to send at rerouted addresses, it is required that in Menu ->”Configuration” ->Local Server->”General” a Sender-address is registered. This address will be used in the Envelope-From: and in the Sender-Header of the rerouted E-Mail.

The E-Mail addresses may only consist of the name, the symbol @ and a domain. Comments and the written out full name should herein not be contained.

The following standard addresses should unconditionally be registered into this file if they are not registered as a real E-mail-addresses in the Hamster:

news=admin
postmaster=admin
abuse=admin
usenet=admin
news=admin@Your_fqdn
postmaster= admin@Your_fqdn
abuse= admin@Your_fqdn
usenet= admin@Your_fqdn

The domain-part of the E-Mail address can also contain the wildcard "%FQDN%", which corresponds to the FQDN set in Hamster. As far as no FQDN is set, the corresponding MailAlias-lines are ignored.

A multiple nesting of the aliass is possible up to 99 steps. It should be especially made sure however, that no ring structures of alias-rerouting exists. Where appropriate such ring structures if available will be stopped by the Mailrouter after 99 steps of alias-rerouting.

If the file MAlias.hst is not available when Hamster starts, it will be created with the standard addresses mentioned above.

Source: C:\AA\Src20020607\EnHlp\html\file47xs.htm - (96)


Server - main folder

Files in the " (main folder) \ server "

Translated by Obbe-Jan Bakker

Allpulls.txt

This file is no longer used and can be deleted.

Alldescs.txt

Description of the newsgroups.

Format: group-name TAB group-description

Source: C:\AA\Src20020607\EnHlp\html\file3p2o.htm - (97)


Files in the folder for each separate server

Files in the " (main folder) \ server \ (server name) "

Translated by Obbe-Jan Bakker

Server.ini
Basic settings of the server.

Greeting.txt
Initial greeting message of the server.

Groups.txt
Group list of the server.

Help.txt
Help file of the server.

NewGrps.txt
List of the new news (groups) (update for "Groups.txt"). (used til 1.3.19)
This file is no longer used and can be removed.

GrpDescs.txt
List of the group descriptions loaded from the server.

Overview.txt
Lists the fields supported in the Overview (XOver) of the server.

GetMids.txt
List of Message-IDs, which are set to be loaded on the next pull for this server, after which the Message-IDs
are automatically removed from this file.
These Message-IDs can be added from the Killfile, because of request from a newsreader program and
by menu ' Automation / tab: Load articles by MID '.
Every line in this file contains one Message-ID. It this Message-ID is preceded with a "!" then the
article will also be loaded if it already exists in Hamster (by article or history).
Note! Use of "!" may cause duplicate articles, so use with care!

Source: C:\AA\Src20020607\EnHlp\html\file3p4g.htm - (98)


Server.ini

File: (main folder)\Server\$Server\Server.ini

Translated by Heiko Studt

Server.ini

This ini-file contains server-specific settings. Some of these can not be changed by menu.

[Setup]

ReadOnly=0

If ReadOnly is set to 1, the given newsserver will not be used to post articles (default: 0).

RemoteTimeoutConnect=120
RemoteTimeoutCommand=120

Time-out for remote server i.e. how many seconds should Hamster wait until it thinks the connection/command fails (default: 120).

[Newgroups]

4-Digit-Years=0

If 4-Digit-Years is set to 1, NEWGROUPS-command is invoked with format "YYYYMMDD ..." (default: 0 = 2-digits). Change this only if a server keeps sending the complete grouplist with every request for new groups (y2k problem).

LastGMT=NEVER

Normally, "LastGMT" contains a timestamp for when new groups were retrieved the last time. To disable retrieval of new groups, you can set it to "NEVER".

LoadDescs=0

Determines, if descriptions for new groups are loaded immediately. If set to 0 (default), Hamster tries to detect if the newsserver supports the command used. If not, the settings is changed to 2, which disables the loading of descriptions. A value of 1 forces Hamster to always try to load the descriptions.

[Pull] (News-servers)

Threads=1

Number of threads started when pulling news (range: 0-4, default: 1). Setting Threads to 0 (zero) is a way to effectively (temporary) stop all pulls for a server without removing this server with all its info.

NOTE: The usage-policy for some servers might order you not to use higher values than 1, 2 or 3. If in doubt, ask your newsmaster, how many concurrent connections ("sockets") are allowed on his server.

[SMTP] (SMTP-Mailservers)

AUTH=0

If set to 1, Hamster uses SMTP AUTH to login to this SMTP server (default is 0, i.e. don't authenticate).

SASL=

Defines a list of SASL mechanisms (separated by space), which may be used to authenticate on this SMTP server (default is empty, which means, that all mechanisms supported by Hamster may be used. The currently supported SASL mechanisms are: LOGIN,PLAIN,CRAM-MD5,CRAM-SHA1.

-->SSL

Additional tools are required for using SSL with Hamster.

These can be loaded from the Hamster-archive.
http://hamster.ist-super.de/
http://home.t-online.de/home/micha-wr/hamster/index.htm

SSLPort=465

Local (mapped) port for SMTP-SSL-server

UseSSL=0

Use SSL (1) or do not use (0)

STunnelOption=

Optional global parameters for additional options for stunnelw.exe. It can be used to set the security level.

Examples:
STunnelOption =-A d:\your_path\ca.pem-v 2
STunnelOption =-D 7

SSLCiphers=

Selection of SSL Cipher string.

[POP3] (POP3-Mailservers)

SASL=

Defines a list of supported SASL mechanisms (separated by space), which may be used to authenticate on this SMTP server (default is empty, which means, that all mechanisms supported by Hamster may be used. The currently supported SASL mechanisms are: LOGIN,PLAIN,CRAM-MD5,CRAM-SHA1.

GetMaxMailsPerSession=0

The maximal number of emails which shall be loaded in one pull from the Mailserver. The default value is 0, which means load all email available on the server in one single pull.

LeaveOnServer=?

1 = Hamster leaves mail on server.
0 = Hamster deletes mail from server.
? = Use global setting for this server.
If set to 1, Hamster does not delete loaded mails from this server,
even if global "Leave mails on server" (Configuration/Settings) is
not set (default: ?, i.e. global setting applies).

LocalUser=admin

Incomming Mails are sent normally to this local account

FilterSection=*

This filter-section is used in Mailsfilt.hst for this server

-->SSL

Additional tools are required for using SSL with Hamster.

These can be loaded from the Hamster-archive.
http://hamster.ist-super.de/
http://home.t-online.de/home/micha-wr/hamster/index.htm

SSLPort=995

Local (mapped) port for POP3-SSL-server

UseSSL=0

Use SSL (1) or do not use (0)

STunnelOption =-D 7

Optional global parameters for additional options for stunnelw.exe

SSLCiphers=

Selection of SSL Cipher string.

[NNTP] (NNTP-servers)

-->SSL Additional tools are required for using SSL with Hamster.

These can be loaded from the Hamster-archive.
http://hamster.ist-super.de/
http://home.t-online.de/home/micha-wr/hamster/index.htm

SSLPort=563

Local (mapped) port for POP3-SSL-server

UseSSL=0

Use SSL (1) or do not use (0)

STunnelOption=

Optional global parameters for additional options for stunnelw.exe It can be used to set the security level.

Example:
STunnelOption =-A d:\your_path\ca.pem-v 2
STunnelOption =-D 7

SSLCiphers=

Selection of SSL Cipher string.

[Statistic]

This summary of connection-details is made for all external servers (NNTP, POP3, IMAP, SMTP). A connection is successful only when the authentication was fully successful. Just being able to access the server is not enough.

Connections.ok=

Counter for successful connections

Connections.failed=

Counter for failed connections

LastConnect.ok=

Date of the last successful connection

LastConnect.failed=

Date of the last failed connection

LastConnect.Count.ok=

If last connection was successfully: amount of successful connection attempts, otherwise 0

LastConnect.Count.failed=

If last connection has failed: amount of failed connection attempts, otherwise 0

Source: C:\AA\Src20020607\EnHlp\html\file44s0.htm - (99)


Groups - main folder

Files in the " (main folder) \ Groups "

Translated by Obbe-Jan Bakker

History.dat

This file is no longer used and can be deleted.

Hist*.dat

List with article information (MD5-hash of group-name and Message-ID)

Kills.log

Overview of all articles not loaded because of the Scorefile.

Source: C:\AA\Src20020607\EnHlp\html\file3p68.htm - (100)


News.Out

Files in the " (main folder) \ News.out "

Translated by Obbe-Jan Bakker

*.msg

Articles which will be sent to the NNTP-Server of the provider. Messages posted to the local NNTP-server (each article in a separate textfile).

They will be deleted after posting it on a newsserver. If configured so, Hamster will add a Message-ID before posting the article, if - and only if - the article does not have one already. Hamster itself does not overwrite existing Message-IDs.

Hamster will optionally add a "X-Posting-Agent: Hamster Vr. ..."-versionheader on each article before posting.

Other files in this directory will be ignored by Hamster.

Source: C:\AA\Src20020607\EnHlp\html\file3p80.htm - (101)


Files in the folder for each separate group

Files in the " (main folder) \ Groups \ (groups name) "

Translated by Obbe-Jan Bakker

data.dat
Article-database.

data.idx
Index of the article-database.

data.ini
Group-specific info and settings.

Do not change these settings unless you are fully aware of the consequences for Hamster itself and for the users of Hamster and their newsreader programs.

Source: C:\AA\Src20020607\EnHlp\html\file3p9s.htm - (102)


Data.ini

File: (main folder)\Groups\$Group\Data.ini

Translated by Obbe-Jan Bakker

Data.ini

This ini-file contains group-specific settings. Some of these can not be changed by menu.

Do not change these settings unless you are fully aware of the consequences for Hamster itself and for the users of Hamster and their newsreader programs.

[Setup]

Moderator=

Contains the E-Mail-address of the moderator if this group is moderated or the E-Mail address of a mailinglist if this group is a news-to-mail gateway.

Type=

Represents the type of group g=Gateway
                             n=Readonly
                             m=Moderated
                             y=normal group (Posting allowed)

pull.limit=

This setting, if available, overrides the similar global setting in menu 'Configuration / News... / Settings' to determine which articles to pull (hamster.ini [setup], 'pull.limit.first').

Possible values are:

0=no limit, pull all
n(positive)= load n newest articles (that is articles with the highest numbers)
n(negative)= load n oldest articles (that is articles with the lowest numbers)

feedonly=

postserver=

[Info]

description=

This is a text-description of the newsgroup, additional to the name of the group itself. If available, this value will override the description delivered with the grouplist of a remote server for this group and appear as description in the grouplist of your newsreader program.

Created=

The date/time this local group was created in Hamster.

LastClientRead=

The date/time this group was last accessed by a client program.

[Ranges]

Local.Min=
Local.Max=

These settings contain the lowest and highest available articlenumber in this local group. Note! Changing these settings will most likely cause problems in Hamster and/or Hamster users newsreaders programs. Do not confuse these settings with the min/max values for remote servers, as described next.

<server>.Low=
<server>.Min=
<server>.Max=
<server>.FirstPullDone=1

Contains the index-number of the oldest (.low) and newest (.max) number of articles loaded from newsserver <server>. Hamster uses these index-numbers to determine which part of the articlebase on the server will be requested on the next pull for this group on the newsserver <server> ( with the XOver command).

.Low, .Min and .Max are index-numbers of articles available at the time of the last connection with <server>.
.Low is the lowest articlenumber available.
.Max is the highest articlenumber available.
.Min is the articlenumber where the next pull will start.

If a group is requested for the first time from a specific server, than Hamster determines the highest available articlenumber on the server and uses the global settings for 'Pull limit (empty group)' in menu 'Configuration / News... / Settings to determine which articles to pull (hamster.ini [setup], 'pull.limit.first').

If server.min is changed manually, hamster will use this changed value on the next pull for this group / server. This setting can be changed with the slider in menu 'Configuration / News... / tab: Newsgroups'. Lowering this setting will result in older articles being (re-)loaded on the next pull. This may also prove usefull when articles appear to be missing, due to previous problems (serverside or hamsterside).

Consider however that with servers with long retention, the loading of a large amount of articles may take a long time and will take up a large amount of hard disk space or may even exceed available disk space.

Source: C:\AA\Src20020607\EnHlp\html\file3p9s-INI.htm - (103)


Mails - main folder

Files in the " (main folder) \ Mails "

Translated by Obbe-Jan Bakker

MHistory.dat

Mail-History.

Similar to the history-files in the groups-directory, this file is used to recognize already loaded mails.

Source: C:\AA\Src20020607\EnHlp\html\file3pbk.htm - (104)


Mail.Out

Files in the " (main folder) \ Mails \ Mail.out "

Translated by Obbe-Jan Bakker

*.msg

E-mails which will be sent to the SMTP-Server of the provider.

E-Mail sent to the local SMTP-server (each mail in a separate textfile; leading SMTP-envelope-lines are marked with an exclamation-mark "!"). The mails will be deleted after they have been sent out to an external SMTP-server. Other files in this directory will be ignored by Hamster.

Source: C:\AA\Src20020607\EnHlp\html\file3pdc.htm - (105)


Admin

Files in the " (main folder) \ mails \ admin "

Translated by Heiko Studt

*.msg

E-mails received by POP3-servers of the providers and not assigned to normal users go to user admin. This is his path for saved mails.

Each message is stored in a separate file.

Source: C:\AA\Src20020607\EnHlp\html\file3pf4.htm - (106)


Files in the folders of the separate 'Users'

Files in the " (main folder) \ Mails \ (user) "

Translated by Obbe-Jan Bakker

*.msg

E-mails received by POP3-servers of the providers and assigned to a specific user.

Source: C:\AA\Src20020607\EnHlp\html\file3pf9.htm - (107)


Error codes and error messages

Error codes and error messages

Translated by Obbe-Jan Bakker

Frequent error-codes and messages

Hamster-Logfile, Hamster-Replies, WinSock-Errors

Windows-Sockets (WinSock) Error-Codes

Numbers: 10004 - 11004

Remote-Access-Service (RAS) Error-Codes

Numbers: 600 - 752

Win32 - System-Error Codes

Numbers: 1 - 6118

Win32 - Network-Error Codes

Numbers: 2102 - 2693

SSL - Errors

Source: C:\AA\Src20020607\EnHlp\html\erro9b8w.htm - (108)


Error-codes (frequent)

Frequent error-codes and messages

Translated by Obbe-Jan Bakker

Hamster-Logfile

Start of local XXXX-server failed

The called local server can not be started. The most frequent cause: another program is already using the required TCP-Port of the server, e.g. a virus-scanner for E-mail like "Norton's AntiVirus" (NAV), which itself works like a POP3-server, or also a second hamster (from another folder than the already running hamster).

As no two servers can use the same port-number at the same time, you have to configure one of the programs to use another port-number. The configuration-settings from programs used to read from this Hamster like E-mail-Client/Reader will have to be adjusted in a similar way.

Hamster-Replies

500 Permission denied - closing connection. [local NNTP/SMTP]

-ERR Permission denied - closing connection. [local POP3]

The connecting IP-address is not permitted to access Hamster's local server. See "IPAccess.hst"IPAccess.hst for details.

500 Permission denied (not authorized by POP3). [local SMTP]

Hamster's local SMTP-server is configured to only grant access after client has authenticated itself by a successful POP3-login

See also "SMTP-after-POP3" for details.

WinSock-Errors

10048 WSAEADDRINUSE

Possible reasons:* Firewall prevents local Hamster-servers from starting.

10049 WSAEADDRNOTAVAIL

The server is known but could not be reached

Possible reasons:

* You are/were not "online", i.e. not connected to the internet.

* Internet-connection was interrupted.

* The server is temporarily down - try again later.

10053 WSAECONNABORTED

Possible reasons:* Internet-connection was interrupted or lost while connecting to remote server was still in progress.

10061 WSAECONNREFUSED

Possible reasons:

* The local Hamster-server was not started.

* The default port-settings for the Hamster-server and/or the newsreader/mailclient were changed and are not equal any more.

* The port-number is blocked by a firewall.

10065 WSAEHOSTUNREACH

Like 10049 above, but the connection was lost after a valid connection to the server.

10071 WSAEREMOTE

Possible reasons:* Connection-request was refused by remote server because you are not permitted to use it with your current internet-connection, e.g. to access the server of provider X you have to dial-in to provider X.

11001 WSAHOST_NOT_FOUND

Possible reasons:* A server with the given name could not be found - perhaps you've misspelled it.

Source: C:\AA\Src20020607\EnHlp\html\erro9bhs.htm - (109)


Error-codes (WinSock)

Windows Sockets (WinSock) Error Codes

Translated by Obbe-Jan Bakker

Windows Sockets (WinSock) Error Codes

   WSAEINTR               10004   Interrupted system call.
   WSAEBADF               10009   Bad file number.
   WSEACCES               10013   Permission denied.
   WSAEFAULT              10014   Bad address.
   WSAEINVAL              10022   Invalid argument.
   WSAEMFILE              10024   Too many open files/sockets.
   WSAEWOULDBLOCK         10035   Operation would block.
   WSAEINPROGRESS         10036   Operation now in progress. This error is
                                  returned if any Windows Sockets API
                                  function is called while a blocking
                                  function is in progress.
   WSAEALREADY            10037   Operation already in progress.
   WSAENOTSOCK            10038   Socket operation on nonsocket.
   WSAEDESTADDRREQ        10039   Destination address required.
   WSAEMSGSIZE            10040   Message too long.
   WSAEPROTOTYPE          10041   Protocol wrong type for socket.
   WSAENOPROTOOPT         10042   Protocol not available/bad protocol option.
   WSAEPROTONOSUPPORT     10043   Protocol not supported.
   WSAESOCKTNOSUPPORT     10044   Socket type not supported.
   WSAEOPNOTSUPP          10045   Operation not supported on socket.
   WSAEPFNOSUPPORT        10046   Protocol family not supported.
   WSAEAFNOSUPPORT        10047   Address family not supported by protocol
                                  family.
   WSAEADDRINUSE          10048   Address already in use.
   WSAEADDRNOTAVAIL       10049   Cannot assign requested address.
   WSAENETDOWN            10050   Network is down. This error may be
                                  reported at any time if the Windows
                                  Sockets implementation detects an
                                  underlying failure.
   WSAENETUNREACH         10051   Network is unreachable.
   WSAENETRESET           10052   Network dropped connection on reset.
   WSAECONNABORTED        10053   Software caused connection abort.
   WSAECONNRESET          10054   Connection reset by peer.
   WSAENOBUFS             10055   No buffer space available.
   WSAEISCONN             10056   Socket is already connected.
   WSAENOTCONN            10057   Socket is not connected.
   WSAESHUTDOWN           10058   Cannot send after socket shutdown.
   WSAETOOMANYREFS        10059   Too many references: cannot splice.
   WSAETIMEDOUT           10060   Connection timed out.
   WSAECONNREFUSED        10061   Connection refused.
   WSAELOOP               10062   Too many levels of symbolic links.
   WSAENAMETOOLONG        10063   File name too long.
   WSAEHOSTDOWN           10064   Host is down.
   WSAEHOSTUNREACH        10065   No route to host.
   WSAENOTEMPTY           10066   Directory not empty.
   WSAEPROCLIM            10067   Too many processes.
   WSAEUSERS              10068   Too many users.
   WSAEDQUOT              10069   Disc quota exceeded.
   WSAESTALE              10070   Stale NFS file handle
   WSAEREMOTE             10071   Too many levels of remote in path.
   WSASYSNOTREADY         10091   Network subsystem is unavailable.
   WSAVERNOTSUPPORTED     10092   Winsock version not supported.
   WSANOTINITIALISED      10093   Winsock not yet initialized.
   WSAEDISCON             10101   Graceful disconnect in progress.
   WSAENOMORE             10102   - (Winsock2)
   WSAECANCELLED          10103   - (Winsock2)
   WSAEINVALIDPROCTABLE   10104   - (Winsock2)
   WSAEINVALIDPROVIDER    10105   - (Winsock2)
   WSAEPROVIDERFAILEDINIT 10106   - (Winsock2)
   WSASYSCALLFAILURE      10107   System call failure. (WS2)
   WSASERVICE_NOT_FOUND   10108   - (Winsock2)
   WSATYPE_NOT_FOUND      10109   - (Winsock2)
   WSA_E_NO_MORE          10110   - (Winsock2)
   WSA_E_CANCELLED        10111   - (Winsock2)
   WSAEREFUSED            10112   - (Winsock2)
   WSAHOST_NOT_FOUND      11001   Host not found. This message indicates
                                  that the key (name, address, and so on)
                                  was not found.
   WSATRY_AGAIN           11002   Non-authoritative host not found. This
                                  error may suggest that the name service
                                  itself is not functioning.
   WSANO_RECOVERY         11003   Non-recoverable error. This error may
                                  suggest that the name service itself is
                                  not functioning.
   WSANO_DATA             11004   Valid name, no data record of requested
                                  type. This error indicates that the key
                                  (name, address, and so on) was not found.

   WSA_NOT_ENOUGH_MEMORY          Insufficient memory available
   WSA_OPERATION_ABORTED          Overlapped operation aborted
   WSA_IO_INCOMPLETE              Overlapped I/O object not signaled
   WSA_IO_PENDING                 Overlapped I/O will complete later
   WSA_INVALID_PARAMETER          One or more parameters are invalid
   WSA_INVALID_HANDLE             Event object handle not valid

Source: C:\AA\Src20020607\EnHlp\html\erro9eeo.htm - (110)


Error-codes (RAS)

Remote Access service (RAS) Error codes

Translated by Obbe-Jan Bakker

Remote Access service (RAS) Error codes

600    An operation is pending.
601    The port handle is invalid.
602    The port is already open.
603    Caller's buffer is too small.
604    Wrong information specified.
605    Cannot set port information.
606    The port is not connected.
607    The event is invalid.
608    The device does not exist.
609    The device type does not exist.
610    The buffer is invalid.
611    The route is not available.
612    The route is not allocated.
613    Invalid compression specified.
614    Out of buffers.
615    The port was not found.
616    An asynchronous request is pending.
617    The port or device is already disconnecting.
618    The port is not open.
619    The port is disconnected.
620    There are no endpoints.
621    Cannot open the phone book file.
622    Cannot load the phone book file.
623    Cannot find the phone book entry.
624    Cannot write the phone book file.
625    Invalid information found in the phone book.
626    Cannot load a string.
627    Cannot find key.
628    The port was disconnected.
629    The port was disconnected by the remote machine.
630    The port was disconnected due to hardware failure.
631    The port was disconnected by the user.
632    The structure size is incorrect.
633    The port is already in use or is not configured for Remote Access dialout.
634    Cannot register your computer on the remote network.
635    Unknown error.
636    The wrong device is attached to the port.
637    The string could not be converted.
638    The request has timed out.
639    No asynchronous net available.
640    A NetBIOS error has occurred.
641    The server cannot allocate NetBIOS resources needed to support the client.
642    One of your NetBIOS names is already registered on the remote network.
643    A network adapter at the server failed.
644    You will not receive network message popups.
645    Internal authentication error.
646    The account is not permitted to log on at this time of day.
647    The account is disabled.
648    The password has expired.
649    The account does not have Remote Access permission.
650    The Remote Access server is not responding.
651    Your modem (or other connecting device) has reported an error.
652    Unrecognized response from the device.
653    A macro required by the device was not found in the device .INF file section.
654    A command or response in the device .INF file section refers to an undefined macro
655    The <message> macro was not found in the device .INF file section.
656    The <defaultoff> macro in the device .INF file section contains an undefined macro
657    The device .INF file could not be opened.
658    The device name in the device .INF or media .INI file is too long.
659    The media .INI file refers to an unknown device name.
660    The device .INF file contains no responses for the command.
661    The device .INF file is missing a command.
662    Attempted to set a macro not listed in device .INF file section.
663    The media .INI file refers to an unknown device type.
664    Cannot allocate memory.
665    The port is not configured for Remote Access.
666    Your modem (or other connecting device) is not functioning.
667    Cannot read the media .INI file.
668    The connection dropped.
669    The usage parameter in the media .INI file is invalid.
670    Cannot read the section name from the media .INI file.
671    Cannot read the device type from the media .INI file.
672    Cannot read the device name from the media .INI file.
673    Cannot read the usage from the media .INI file.
674    Cannot read the maximum connection BPS rate from the media .INI file.
675    Cannot read the maximum carrier BPS rate from the media .INI file.
676    The line is busy.
677    A person answered instead of a modem.
678    There is no answer.
679    Cannot detect carrier.
680    There is no dial tone.
681    General error reported by device.
682    ERROR WRITING SECTIONNAME
683    ERROR WRITING DEVICETYPE
684    ERROR WRITING DEVICENAME
685    ERROR WRITING MAXCONNECTBPS
686    ERROR WRITING MAXCARRIERBPS
687    ERROR WRITING USAGE
688    ERROR WRITING DEFAULTOFF
689    ERROR READING DEFAULTOFF
690    ERROR EMPTY INI FILE
691    Access denied because username and/or password is invalid on the domain.
692    Hardware failure in port or attached device.
693    ERROR NOT BINARY MACRO
694    ERROR DCB NOT FOUND
695    ERROR STATE MACHINES NOT STARTED
696    ERROR STATE MACHINES ALREADY STARTED
697    ERROR PARTIAL RESPONSE LOOPING
698    A response keyname in the device .INF file is not in the expected format.
699    The device response caused buffer overflow.
700    The expanded command in the device .INF file is too long.
701    The device moved to a BPS rate not supported by the COM driver.
702    Device response received when none expected.
703    ERROR INTERACTIVE MODE
704    ERROR BAD CALLBACK NUMBER
705    ERROR INVALID AUTH STATE
706    ERROR WRITING INITBPS
707    X.25 diagnostic indication.
708    The account has expired.
709    Error changing password on domain.
710    Serial overrun errors were detected while communicating with your modem.
711    RasMan initialization failure. Check the event log.
712    Biplex port is initializing. Wait a few seconds and redial.
713    No active ISDN lines are available.
714    Not enough ISDN channels are available to make the call.
715    Too many errors occurred because of poor phone line quality.
716    The Remote Access IP configuration is unusable.
717    No IP addresses are available in the static pool of Remote Access IP addresses.
718    PPP timeout.
719    PPP terminated by remote machine.
720    No PPP control protocols configured.
721    Remote PPP peer is not responding.
722    The PPP packet is invalid.
723    The phone number, including prefix and suffix, is too long.
724    The IPX protocol cannot dial-out on the port because the computer is an IPX router.
725    The IPX protocol cannot dial-in on the port because the IPX router is not installed..
726    The IPX protocol cannot be used for dial-out on more than one port at a time.
727    Cannot access TCPCFG.DLL.
728    Cannot find an IP adapter bound to Remote Access.
729    SLIP cannot be used unless the IP protocol is installed.
730    Computer registration is not complete.
731    The protocol is not configured.
732    The PPP negotiation is not converging.
733    The PPP control protocol for this network protocol is not available on the server.
734    The PPP link control protocol terminated..
735    The requested address was rejected by the server..
736    The remote computer terminated the control protocol.
737    Loopback detected..
738    The server did not assign an address.
739    The remote server cannot use the Windows NT encrypted password.
740    The TAPI devices configured for Remote Access failed to initialize or were not installed correctly.
741    The local computer does not support encryption.
742    The remote server does not support encryption.
743    The remote server requires encryption.
744    Cannot use the IPX net number assigned by the remote server. Check the event log.
752    A syntax error was encountered while processing a script.

Source: C:\AA\Src20020607\EnHlp\html\erro9hkg.htm - (111)


Error-codes (Win32-System)

Win32 - System Error Codes

Translated by Obbe-Jan Bakker

Win32 - system Error codes

0    The operation completed successfully. ERROR_SUCCESS
1    Incorrect function. ERROR_INVALID_FUNCTION
2    The system cannot find the file specified. ERROR_FILE_NOT_FOUND
3    The system cannot find the path specified. ERROR_PATH_NOT_FOUND
4    The system cannot open the file. ERROR_TOO_MANY_OPEN_FILES
5    Access is denied. ERROR_ACCESS_DENIED
6    The handle is invalid. ERROR_INVALID_HANDLE
7    The storage control blocks were destroyed. ERROR_ARENA_TRASHED
8    Not enough storage is available to process this command. ERROR_NOT_ENOUGH_MEMORY
9    The storage control block address is invalid. ERROR_INVALID_BLOCK

10    The environment is incorrect. ERROR_BAD_ENVIRONMENT
11    An attempt was made to load a program with an incorrect format. ERROR_BAD_FORMAT
12    The access code is invalid. ERROR_INVALID_ACCESS
13    The data is invalid. ERROR_INVALID_DATA
14    Not enough storage is available to complete this operation. ERROR_OUTOFMEMORY
15    The system cannot find the drive specified. ERROR_INVALID_DRIVE
16    The directory cannot be removed. ERROR_CURRENT_DIRECTORY
17    The system cannot move the file to a different disk drive. ERROR_NOT_SAME_DEVICE
18    There are no more files. ERROR_NO_MORE_FILES
19    The media is write protected. ERROR_WRITE_PROTECT

20    The system cannot find the device specified. ERROR_BAD_UNIT
21    The device is not ready. ERROR_NOT_READY
22    The device does not recognize the command. ERROR_BAD_COMMAND
23    Data error (cyclic redundancy check). ERROR_CRC
24    The program issued a command but the command length is incorrect. ERROR_BAD_LENGTH
25    The drive cannot locate a specific area or track on the disk. ERROR_SEEK
26    The specified disk or diskette cannot be accessed. ERROR_NOT_DOS_DISK
27    The drive cannot find the sector requested. ERROR_SECTOR_NOT_FOUND
28    The printer is out of paper. ERROR_OUT_OF_PAPER
29    The system cannot write to the specified device. ERROR_WRITE_FAULT

30    The system cannot read from the specified device. ERROR_READ_FAULT
31    A device attached to the system is not functioning. ERROR_GEN_FAILURE
32    The process cannot access the file because it is being used by another process. ERROR_SHARING_VIOLATION
33    The process cannot access the file because another process has locked a portion of the file. ERROR_LOCK_VIOLATION
34    The wrong diskette is in the drive. Insert %2 (Volume Serial Number: %3) into drive %1. ERROR_WRONG_DISK
36    Too many files opened for sharing. ERROR_SHARING_BUFFER_EXCEEDED
38    Reached the end of the file. ERROR_HANDLE_EOF
39    The disk is full. ERROR_HANDLE_DISK_FULL

50    The network request is not supported. ERROR_NOT_SUPPORTED
51    The remote computer is not available. ERROR_REM_NOT_LIST
52    A duplicate name exists on the network. ERROR_DUP_NAME
53    The network path was not found. ERROR_BAD_NETPATH
54    The network is busy. ERROR_NETWORK_BUSY
55    The specified network resource or device is no longer available. ERROR_DEV_NOT_EXIST
56    The network BIOS command limit has been reached. ERROR_TOO_MANY_CMDS
57    A network adapter hardware error occurred. ERROR_ADAP_HDW_ERR
58    The specified server cannot perform the requested operation. ERROR_BAD_NET_RESP
59    An unexpected network error occurred. ERROR_UNEXP_NET_ERR

60    The remote adapter is not compatible. ERROR_BAD_REM_ADAP
61    The printer queue is full. ERROR_PRINTQ_FULL
62    Space to store the file waiting to be printed is not available on the server. ERROR_NO_SPOOL_SPACE
63    Your file waiting to be printed was deleted. ERROR_PRINT_CANCELLED
64    The specified network name is no longer available. ERROR_NETNAME_DELETED
65    Network access is denied. ERROR_NETWORK_ACCESS_DENIED
66    The network resource type is not correct. ERROR_BAD_DEV_TYPE
67    The network name cannot be found. ERROR_BAD_NET_NAME
68    The name limit for the local computer network adapter card was exceeded. ERROR_TOO_MANY_NAMES
69    The network BIOS session limit was exceeded. ERROR_TOO_MANY_SESS

70    The remote server has been paused or is in the process of being started. ERROR_SHARING_PAUSED
71    No more connections can be made to this remote computer at this time because there are already as many connections as the computer can accept. ERROR_REQ_NOT_ACCEP
72    The specified printer or disk device has been paused. ERROR_REDIR_PAUSED

80    The file exists. ERROR_FILE_EXISTS
82    The directory or file cannot be created. ERROR_CANNOT_MAKE
83    Fail on INT 24. ERROR_FAIL_I24
84    Storage to process this request is not available. ERROR_OUT_OF_STRUCTURES
85    The local device name is already in use. ERROR_ALREADY_ASSIGNED
86    The specified network password is not correct. ERROR_INVALID_PASSWORD
87    The parameter is incorrect. ERROR_INVALID_PARAMETER
88    A write fault occurred on the network. ERROR_NET_WRITE_FAULT
89    The system cannot start another process at this time. ERROR_NO_PROC_SLOTS

100    Cannot create another system semaphore. ERROR_TOO_MANY_SEMAPHORES
101    The exclusive semaphore is owned by another process. ERROR_EXCL_SEM_ALREADY_OWNED
102    The semaphore is set and cannot be closed. ERROR_SEM_IS_SET
103    The semaphore cannot be set again. ERROR_TOO_MANY_SEM_REQUESTS
104    Cannot request exclusive semaphores at interrupt time. ERROR_INVALID_AT_INTERRUPT_TIME
105    The previous ownership of this semaphore has ended. ERROR_SEM_OWNER_DIED
106    Insert the diskette for drive %1. ERROR_SEM_USER_LIMIT
107    The program stopped because an alternate diskette was not inserted. ERROR_DISK_CHANGE
108    The disk is in use or locked by another process. ERROR_DRIVE_LOCKED
109    The pipe has been ended. ERROR_BROKEN_PIPE

110    The system cannot open the device or file specified. ERROR_OPEN_FAILED
111    The file name is too long. ERROR_BUFFER_OVERFLOW
112    There is not enough space on the disk. ERROR_DISK_FULL
113    No more internal file identifiers available. ERROR_NO_MORE_SEARCH_HANDLES
114    The target internal file identifier is incorrect. ERROR_INVALID_TARGET_HANDLE
117    The IOCTL call made by the application program is not correct. ERROR_INVALID_CATEGORY
118    The verify-on-write switch parameter value is not correct. ERROR_INVALID_VERIFY_SWITCH
119    The system does not support the command requested. ERROR_BAD_DRIVER_LEVEL

120    This function is not supported on this system. ERROR_CALL_NOT_IMPLEMENTED
121    The semaphore timeout period has expired. ERROR_SEM_TIMEOUT
122    The data area passed to a system call is too small. ERROR_INSUFFICIENT_BUFFER
123    The filename, directory name, or volume label syntax is incorrect. ERROR_INVALID_NAME
124    The system call level is not correct. ERROR_INVALID_LEVEL
125    The disk has no volume label. ERROR_NO_VOLUME_LABEL
126    The specified module could not be found. ERROR_MOD_NOT_FOUND
127    The specified procedure could not be found. ERROR_PROC_NOT_FOUND
128    There are no child processes to wait for. ERROR_WAIT_NO_CHILDREN
129    The %1 application cannot be run in Win32 mode. ERROR_CHILD_NOT_COMPLETE

130    Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O. ERROR_DIRECT_ACCESS_HANDLE
131    An attempt was made to move the file pointer before the beginning of the file. ERROR_NEGATIVE_SEEK
132    The file pointer cannot be set on the specified device or file. ERROR_SEEK_ON_DEVICE
133    A JOIN or SUBST command cannot be used for a drive that contains previously joined drives. ERROR_IS_JOIN_TARGET
134    An attempt was made to use a JOIN or SUBST command on a drive that has already been joined. ERROR_IS_JOINED
135    An attempt was made to use a JOIN or SUBST command on a drive that has already been substituted. ERROR_IS_SUBSTED
136    The system tried to delete the JOIN of a drive that is not joined. ERROR_NOT_JOINED
137    The system tried to delete the substitution of a drive that is not substituted. ERROR_NOT_SUBSTED
138    The system tried to join a drive to a directory on a joined drive. ERROR_JOIN_TO_JOIN
139    The system tried to substitute a drive to a directory on a substituted drive. ERROR_SUBST_TO_SUBST

140    The system tried to join a drive to a directory on a substituted drive. ERROR_JOIN_TO_SUBST
141    The system tried to SUBST a drive to a directory on a joined drive. ERROR_SUBST_TO_JOIN
142    The system cannot perform a JOIN or SUBST at this time. ERROR_BUSY_DRIVE
143    The system cannot join or substitute a drive to or for a directory on the same drive. ERROR_SAME_DRIVE
144    The directory is not a subdirectory of the root directory. ERROR_DIR_NOT_ROOT
145    The directory is not empty. ERROR_DIR_NOT_EMPTY
146    The path specified is being used in a substitute. ERROR_IS_SUBST_PATH
147    Not enough resources are available to process this command. ERROR_IS_JOIN_PATH
148    The path specified cannot be used at this time. ERROR_PATH_BUSY
149    An attempt was made to join or substitute a drive for which a directory on the drive is the target of a previous substitute. ERROR_IS_SUBST_TARGET

150    System trace information was not specified in your CONFIG.SYS file, or tracing is disallowed. ERROR_SYSTEM_TRACE
151    The number of specified semaphore events for DosMuxSemWait is not correct. ERROR_INVALID_EVENT_COUNT
152    DosMuxSemWait did not execute; too many semaphores are already set. ERROR_TOO_MANY_MUXWAITERS
153    The DosMuxSemWait list is not correct. ERROR_INVALID_LIST_FORMAT
154    The volume label you entered exceeds the label character limit of the target file system. ERROR_LABEL_TOO_LONG
155    Cannot create another thread. ERROR_TOO_MANY_TCBS
156    The recipient process has refused the signal. ERROR_SIGNAL_REFUSED
157    The segment is already discarded and cannot be locked. ERROR_DISCARDED
158    The segment is already unlocked. ERROR_NOT_LOCKED
159    The address for the thread ID is not correct. ERROR_BAD_THREADID_ADDR

160    The argument string passed to DosExecPgm is not correct. ERROR_BAD_ARGUMENTS
161    The specified path is invalid. ERROR_BAD_PATHNAME
162    A signal is already pending. ERROR_SIGNAL_PENDING
164    No more threads can be created in the system. ERROR_MAX_THRDS_REACHED
167    Unable to lock a region of a file. ERROR_LOCK_FAILED

170    The requested resource is in use. ERROR_BUSY
173    A lock request was not outstanding for the supplied cancel region. ERROR_CANCEL_VIOLATION
174    The file system does not support atomic changes to the lock type. ERROR_ATOMIC_LOCKS_NOT_SUPPORTED

180    The system detected a segment number that was not correct. ERROR_INVALID_SEGMENT_NUMBER
182    The operating system cannot run %1. ERROR_INVALID_ORDINAL
183    Cannot create a file when that file already exists. ERROR_ALREADY_EXISTS
186    The flag passed is not correct. ERROR_INVALID_FLAG_NUMBER
187    The specified system semaphore name was not found. ERROR_SEM_NOT_FOUND
188    The operating system cannot run %1. ERROR_INVALID_STARTING_CODESEG
189    The operating system cannot run %1. ERROR_INVALID_STACKSEG

190    The operating system cannot run %1. ERROR_INVALID_MODULETYPE
191    Cannot run %1 in Win32 mode. ERROR_INVALID_EXE_SIGNATURE
192    The operating system cannot run %1. ERROR_EXE_MARKED_INVALID
193    is not a valid Win32 application. ERROR_BAD_EXE_FORMAT
194    The operating system cannot run %1. ERROR_ITERATED_DATA_EXCEEDS_64k
195    The operating system cannot run %1. ERROR_INVALID_MINALLOCSIZE
196    The operating system cannot run this application program. ERROR_DYNLINK_FROM_INVALID_RING
197    The operating system is not presently configured to run this application. ERROR_IOPL_NOT_ENABLED
198    The operating system cannot run %1. ERROR_INVALID_SEGDPL
199    The operating system cannot run this application program. ERROR_AUTODATASEG_EXCEEDS_64k

200    The code segment cannot be greater than or equal to 64K. ERROR_RING2SEG_MUST_BE_MOVABLE
201    The operating system cannot run %1. ERROR_RELOC_CHAIN_XEEDS_SEGLIM
202    The operating system cannot run %1. ERROR_INFLOOP_IN_RELOC_CHAIN
203    The system could not find the environment option that was entered. ERROR_ENVVAR_NOT_FOUND
205    No process in the command subtree has a signal handler. ERROR_NO_SIGNAL_SENT
206    The filename or extension is too long. ERROR_FILENAME_EXCED_RANGE
207    The ring 2 stack is in use. ERROR_RING2_STACK_IN_USE
208    The global filename characters, * or ?, are entered incorrectly or too many global filename characters are specified. ERROR_META_EXPANSION_TOO_LONG
209    The signal being posted is not correct. ERROR_INVALID_SIGNAL_NUMBER

210    The signal handler cannot be set. ERROR_THREAD_1_INACTIVE
212    The segment is locked and cannot be reallocated. ERROR_LOCKED
214    Too many dynamic-link modules are attached to this program or dynamic-link module. ERROR_TOO_MANY_MODULES
215    Can't nest calls to LoadModule. ERROR_NESTING_NOT_ALLOWED
216    The image file %1 is valid, but is for a machine type other than the current machine. ERROR_EXE_MACHINE_TYPE_MISMATCH

230    The pipe state is invalid. ERROR_BAD_PIPE
231    All pipe instances are busy. ERROR_PIPE_BUSY
232    The pipe is being closed. ERROR_NO_DATA
233    No process is on the other end of the pipe. ERROR_PIPE_NOT_CONNECTED
234    More data is available. ERROR_MORE_DATA

240    The session was canceled. ERROR_VC_DISCONNECTED
254    The specified extended attribute name was invalid. ERROR_INVALID_EA_NAME
255    The extended attributes are inconsistent. ERROR_EA_LIST_INCONSISTENT
259    No more data is available. ERROR_NO_MORE_ITEMS
266    The copy functions cannot be used. ERROR_CANNOT_COPY
267    The directory name is invalid. ERROR_DIRECTORY
275    The extended attributes did not fit in the buffer. ERROR_EAS_DIDNT_FIT
276    The extended attribute file on the mounted file system is corrupt. ERROR_EA_FILE_CORRUPT
277    The extended attribute table file is full. ERROR_EA_TABLE_FULL
278    The specified extended attribute handle is invalid. ERROR_INVALID_EA_HANDLE

282    The mounted file system does not support extended attributes. ERROR_EAS_NOT_SUPPORTED
288    Attempt to release mutex not owned by caller. ERROR_NOT_OWNER
298    Too many posts were made to a semaphore. ERROR_TOO_MANY_POSTS
299    Only part of a ReadProcessMemoty or WriteProcessMemory request was completed. ERROR_PARTIAL_COPY

300    The oplock request is denied. ERROR_OPLOCK_NOT_GRANTED
301    An invalid oplock acknowledgment was received by the system. ERROR_INVALID_OPLOCK_PROTOCOL

317    The system cannot find message text for message number 0x%1 in the message file for %2. ERROR_MR_MID_NOT_FOUND

487    Attempt to access invalid address. ERROR_INVALID_ADDRESS

534    Arithmetic result exceeded 32 bits. ERROR_ARITHMETIC_OVERFLOW
535    There is a process on other end of the pipe. ERROR_PIPE_CONNECTED
536    Waiting for a process to open the other end of the pipe. ERROR_PIPE_LISTENING

994    Access to the extended attribute was denied. ERROR_EA_ACCESS_DENIED
995    The I/O operation has been aborted because of either a thread exit or an application request. ERROR_OPERATION_ABORTED
996    Overlapped I/O event is not in a signaled state. ERROR_IO_INCOMPLETE
997    Overlapped I/O operation is in progress. ERROR_IO_PENDING
998    Invalid access to memory location. ERROR_NOACCESS
999    Error performing inpage operation. ERROR_SWAPERROR

1001    Recursion too deep; the stack overflowed. ERROR_STACK_OVERFLOW
1002    The window cannot act on the sent message. ERROR_INVALID_MESSAGE
1003    Cannot complete this function. ERROR_CAN_NOT_COMPLETE
1004    Invalid flags. ERROR_INVALID_FLAGS
1005    The volume does not contain a recognized file system. Please make sure that all required file system drivers are loaded and that the volume is not corrupted. ERROR_UNRECOGNIZED_VOLUME
1006    The volume for a file has been externally altered so that the opened file is no longer valid. ERROR_FILE_INVALID
1007    The requested operation cannot be performed in full-screen mode. ERROR_FULLSCREEN_MODE
1008    An attempt was made to reference a token that does not exist. ERROR_NO_TOKEN
1009    The configuration registry database is corrupt. ERROR_BADDB

1010    The configuration registry key is invalid. ERROR_BADKEY
1011    The configuration registry key could not be opened. ERROR_CANTOPEN
1012    The configuration registry key could not be read. ERROR_CANTREAD
1013    The configuration registry key could not be written. ERROR_CANTWRITE
1014    One of the files in the registry database had to be recovered by use of a log or alternate copy. The recovery was successful. ERROR_REGISTRY_RECOVERED
1015    The registry is corrupted. The structure of one of the files that contains registry data is corrupted, or the system's image of the file in memory is corrupted, or the file could not be recovered because the alternate copy or log was absent or corrupted. ERROR_REGISTRY_CORRUPT
1016    An I/O operation initiated by the registry failed unrecoverably. The registry could not read in, or write out, or flush, one of the files that contain the system's image of the registry. ERROR_REGISTRY_IO_FAILED
1017    The system has attempted to load or restore a file into the registry, but the specified file is not in a registry file format. ERROR_NOT_REGISTRY_FILE
1018    Illegal operation attempted on a registry key that has been marked for deletion. ERROR_KEY_DELETED
1019    System could not allocate the required space in a registry log. ERROR_NO_LOG_SPACE

1020    Cannot create a symbolic link in a registry key that already has subkeys or values. ERROR_KEY_HAS_CHILDREN
1021    Cannot create a stable subkey under a volatile parent key. ERROR_CHILD_MUST_BE_VOLATILE
1022    A notify change request is being completed and the information is not being returned in the caller's buffer. The caller now needs to enumerate the files to find the changes. ERROR_NOTIFY_ENUM_DIR

1051    A stop control has been sent to a service that other running services are dependent on. ERROR_DEPENDENT_SERVICES_RUNNING
1052    The requested control is not valid for this service. ERROR_INVALID_SERVICE_CONTROL
1053    The service did not respond to the start or control request in a timely fashion. ERROR_SERVICE_REQUEST_TIMEOUT
1054    A thread could not be created for the service. ERROR_SERVICE_NO_THREAD
1055    The service database is locked. ERROR_SERVICE_DATABASE_LOCKED
1056    An instance of the service is already running. ERROR_SERVICE_ALREADY_RUNNING
1057    The account name is invalid or does not exist. ERROR_INVALID_SERVICE_ACCOUNT
1058    The service cannot be started, either because it is disabled or because it has no enabled devices associated with it. ERROR_SERVICE_DISABLED
1059    Circular service dependency was specified. ERROR_CIRCULAR_DEPENDENCY

1060    The specified service does not exist as an installed service. ERROR_SERVICE_DOES_NOT_EXIST
1061    The service cannot accept control messages at this time. ERROR_SERVICE_CANNOT_ACCEPT_CTRL
1062    The service has not been started. ERROR_SERVICE_NOT_ACTIVE
1063    The service process could not connect to the service controller. ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
1064    An exception occurred in the service when handling the control request. ERROR_EXCEPTION_IN_SERVICE
1065    The database specified does not exist. ERROR_DATABASE_DOES_NOT_EXIST
1066    The service has returned a service-specific error code. ERROR_SERVICE_SPECIFIC_ERROR
1067    The process terminated unexpectedly. ERROR_PROCESS_ABORTED
1068    The dependency service or group failed to start. ERROR_SERVICE_DEPENDENCY_FAIL
1069    The service did not start due to a logon failure. ERROR_SERVICE_LOGON_FAILED

1070    After starting, the service hung in a start-pending state. ERROR_SERVICE_START_HANG
1071    The specified service database lock is invalid. ERROR_INVALID_SERVICE_LOCK
1072    The specified service has been marked for deletion. ERROR_SERVICE_MARKED_FOR_DELETE
1073    The specified service already exists. ERROR_SERVICE_EXISTS
1074    The system is currently running with the last-known-good configuration. ERROR_ALREADY_RUNNING_LKG
1075    The dependency service does not exist or has been marked for deletion. ERROR_SERVICE_DEPENDENCY_DELETED
1076    The current boot has already been accepted for use as the last-known-good control set. ERROR_BOOT_ALREADY_ACCEPTED
1077    No attempts to start the service have been made since the last boot. ERROR_SERVICE_NEVER_STARTED
1078    The name is already in use as either a service name or a service display name. ERROR_DUPLICATE_SERVICE_NAME
1079    The account specified for this service is different from the account specified for other services running in the same process. ERROR_DIFFERENT_SERVICE_ACCOUNT

1080    Failure actions can only be set for Win32 services, not for drivers. ERROR_CANNOT_DETECT_DRIVER_FAILURE
1081    This service runs in the same process as the service control manager. Therefore, the service control manager cannot take action if this service's process terminates unexpectedly. ERROR_CANNOT_DETECT_PROCESS_ABORT
1082    No recovery program has been configured for this service. ERROR_NO_RECOVERY_PROGRAM

1100    The physical end of the tape has been reached. ERROR_END_OF_MEDIA
1101    A tape access reached a filemark. ERROR_FILEMARK_DETECTED
1102    The beginning of the tape or a partition was encountered. ERROR_BEGINNING_OF_MEDIA
1103    A tape access reached the end of a set of files. ERROR_SETMARK_DETECTED
1104    No more data is on the tape. ERROR_NO_DATA_DETECTED
1105    Tape could not be partitioned. ERROR_PARTITION_FAILURE
1106    When accessing a new tape of a multivolume partition, the current blocksize is incorrect. ERROR_INVALID_BLOCK_LENGTH
1107    Tape partition information could not be found when loading a tape. ERROR_DEVICE_NOT_PARTITIONED
1108    Unable to lock the media eject mechanism. ERROR_UNABLE_TO_LOCK_MEDIA
1109    Unable to unload the media. ERROR_UNABLE_TO_UNLOAD_MEDIA

1110    The media in the drive may have changed. ERROR_MEDIA_CHANGED
1111    The I/O bus was reset. ERROR_BUS_RESET
1112    No media in drive. ERROR_NO_MEDIA_IN_DRIVE
1113    No mapping for the Unicode character exists in the target multi-byte code page. ERROR_NO_UNICODE_TRANSLATION
1114    A dynamic link library (DLL) initialization routine failed. ERROR_DLL_INIT_FAILED
1115    A system shutdown is in progress. ERROR_SHUTDOWN_IN_PROGRESS
1116    Unable to abort the system shutdown because no shutdown was in progress. ERROR_NO_SHUTDOWN_IN_PROGRESS
1117    The request could not be performed because of an I/O device error. ERROR_IO_DEVICE
1118    No serial device was successfully initialized. The serial driver will unload. ERROR_SERIAL_NO_DEVICE
1119    Unable to open a device that was sharing an interrupt request (IRQ) with other devices. At least one other device that uses that IRQ was already opened. ERROR_IRQ_BUSY

1120    A serial I/O operation was completed by another write to the serial port. The IOCTL_SERIAL_XOFF_COUNTER reached zero.) ERROR_MORE_WRITES
1121    A serial I/O operation completed because the timeout period expired. The IOCTL_SERIAL_XOFF_COUNTER did not reach zero.) ERROR_COUNTER_TIMEOUT
1122    No ID address mark was found on the floppy disk. ERROR_FLOPPY_ID_MARK_NOT_FOUND
1123    Mismatch between the floppy disk sector ID field and the floppy disk controller track address. ERROR_FLOPPY_WRONG_CYLINDER
1124    The floppy disk controller reported an error that is not recognized by the floppy disk driver. ERROR_FLOPPY_UNKNOWN_ERROR
1125    The floppy disk controller returned inconsistent results in its registers. ERROR_FLOPPY_BAD_REGISTERS
1126    While accessing the hard disk, a recalibrate operation failed, even after retries. ERROR_DISK_RECALIBRATE_FAILED
1127    While accessing the hard disk, a disk operation failed even after retries. ERROR_DISK_OPERATION_FAILED
1128    While accessing the hard disk, a disk controller reset was needed, but even that failed. ERROR_DISK_RESET_FAILED
1129    Physical end of tape encountered. ERROR_EOM_OVERFLOW

1130    Not enough server storage is available to process this command. ERROR_NOT_ENOUGH_SERVER_MEMORY
1131    A potential deadlock condition has been detected. ERROR_POSSIBLE_DEADLOCK
1132    The base address or the file offset specified does not have the proper alignment. ERROR_MAPPED_ALIGNMENT

1140    An attempt to change the system power state was vetoed by another application or driver. ERROR_SET_POWER_STATE_VETOED
1141    The system BIOS failed an attempt to change the system power state. ERROR_SET_POWER_STATE_FAILED
1142    An attempt was made to create more links on a file than the file system supports. ERROR_TOO_MANY_LINKS

1150    The specified program requires a newer version of Windows. ERROR_OLD_WIN_VERSION
1151    The specified program is not a Windows or MS-DOS program. ERROR_APP_WRONG_OS
1152    Cannot start more than one instance of the specified program. ERROR_SINGLE_INSTANCE_APP
1153    The specified program was written for an earlier version of Windows. ERROR_RMODE_APP
1154    One of the library files needed to run this application is damaged. ERROR_INVALID_DLL
1155    No application is associated with the specified file for this operation. ERROR_NO_ASSOCIATION
1156    An error occurred in sending the command to the application. ERROR_DDE_FAIL
1157    One of the library files needed to run this application cannot be found. ERROR_DLL_NOT_FOUND
1158    The current process has used all of its system allowance of handles for Window Manager objects. ERROR_NO_MORE_USER_HANDLES
1159    The message can be used only with synchronous operations. ERROR_MESSAGE_SYNC_ONLY

1160    The indicated source element has no media. ERROR_SOURCE_ELEMENT_EMPTY
1161    The indicated destination element already contains media. ERROR_DESTINATION_ELEMENT_FULL
1162    The indicated element does not exist. ERROR_ILLEGAL_ELEMENT_ADDRESS
1163    The indicated element is part of a magazine that is not present. ERROR_MAGAZINE_NOT_PRESENT
1164    The indicated device requires reinitialization due to hardware errors. ERROR_DEVICE_REINITIALIZATION_NEEDED
1165    The device has indicated that cleaning is required before further operations are attempted. ERROR_DEVICE_REQUIRES_CLEANING
1166    The device has indicated that its door is open. ERROR_DEVICE_DOOR_OPEN
1167    The device is not connected. ERROR_DEVICE_NOT_CONNECTED
1168    Element not found. ERROR_NOT_FOUND
1169    There was no match for the specified key in the index. ERROR_NO_MATCH

1170    The property set specified does not exist on the object. ERROR_SET_NOT_FOUND
1171    The point passed to GetMouseMovePoints is not in the buffer. ERROR_POINT_NOT_FOUND
1172    The tracking (workstation) service is not running. ERROR_NO_TRACKING_SERVICE
1173    The Volume ID could not be found. ERROR_NO_VOLUME_ID

1200    The specified device name is invalid. ERROR_BAD_DEVICE
1201    The device is not currently connected but it is a remembered connection. ERROR_CONNECTION_UNAVAIL
1202    An attempt was made to remember a device that had previously been remembered. ERROR_DEVICE_ALREADY_REMEMBERED
1203    No network provider accepted the given network path. ERROR_NO_NET_OR_BAD_PATH
1204    The specified network provider name is invalid. ERROR_BAD_PROVIDER
1205    Unable to open the network connection profile. ERROR_CANNOT_OPEN_PROFILE
1206    The network connection profile is corrupted. ERROR_BAD_PROFILE
1207    Cannot enumerate a noncontainer. ERROR_NOT_CONTAINER
1208    An extended error has occurred. ERROR_EXTENDED_ERROR
1209    The format of the specified group name is invalid. ERROR_INVALID_GROUPNAME

1210    The format of the specified computer name is invalid. ERROR_INVALID_COMPUTERNAME
1211    The format of the specified event name is invalid. ERROR_INVALID_EVENTNAME
1212    The format of the specified domain name is invalid. ERROR_INVALID_DOMAINNAME
1213    The format of the specified service name is invalid. ERROR_INVALID_SERVICENAME
1214    The format of the specified network name is invalid. ERROR_INVALID_NETNAME
1215    The format of the specified share name is invalid. ERROR_INVALID_SHARENAME
1216    The format of the specified password is invalid. ERROR_INVALID_PASSWORDNAME
1217    The format of the specified message name is invalid. ERROR_INVALID_MESSAGENAME
1218    The format of the specified message destination is invalid. ERROR_INVALID_MESSAGEDEST
1219    The credentials supplied conflict with an existing set of credentials. ERROR_SESSION_CREDENTIAL_CONFLICT

1220    An attempt was made to establish a session to a network server, but there are already too many sessions established to that server. ERROR_REMOTE_SESSION_LIMIT_EXCEEDED
1221    The workgroup or domain name is already in use by another computer on the network. ERROR_DUP_DOMAINNAME
1222    The network is not present or not started. ERROR_NO_NETWORK
1223    The operation was canceled by the user. ERROR_CANCELLED
1224    The requested operation cannot be performed on a file with a user-mapped section open. ERROR_USER_MAPPED_FILE
1225    The remote system refused the network connection. ERROR_CONNECTION_REFUSED
1226    The network connection was gracefully closed. ERROR_GRACEFUL_DISCONNECT
1227    The network transport endpoint already has an address associated with it. ERROR_ADDRESS_ALREADY_ASSOCIATED
1228    An address has not yet been associated with the network endpoint. ERROR_ADDRESS_NOT_ASSOCIATED
1229    An operation was attempted on a nonexistent network connection. ERROR_CONNECTION_INVALID

1230    An invalid operation was attempted on an active network connection. ERROR_CONNECTION_ACTIVE
1231    The remote network is not reachable by the transport. ERROR_NETWORK_UNREACHABLE
1232    The remote system is not reachable by the transport. ERROR_HOST_UNREACHABLE
1233    The remote system does not support the transport protocol. ERROR_PROTOCOL_UNREACHABLE
1234    No service is operating at the destination network endpoint on the remote system. ERROR_PORT_UNREACHABLE
1235    The request was aborted. ERROR_REQUEST_ABORTED
1236    The network connection was aborted by the local system. ERROR_CONNECTION_ABORTED
1237    The operation could not be completed. A retry should be performed. ERROR_RETRY
1238    A connection to the server could not be made because the limit on the number of concurrent connections for this account has been reached. ERROR_CONNECTION_COUNT_LIMIT
1239    Attempting to log in during an unauthorized time of day for this account. ERROR_LOGIN_TIME_RESTRICTION

1240    The account is not authorized to log in from this station. ERROR_LOGIN_WKSTA_RESTRICTION
1241    The network address could not be used for the operation requested. ERROR_INCORRECT_ADDRESS
1242    The service is already registered. ERROR_ALREADY_REGISTERED
1243    The specified service does not exist. ERROR_SERVICE_NOT_FOUND
1244    The operation being requested was not performed because the user has not been authenticated. ERROR_NOT_AUTHENTICATED
1245    The operation being requested was not performed because the user has not logged on to the network. The specified service does not exist. ERROR_NOT_LOGGED_ON
1246    Continue with work in progress. ERROR_CONTINUE
1247    An attempt was made to perform an initialization operation when initialization has already been completed. ERROR_ALREADY_INITIALIZED
1248    No more local devices. ERROR_NO_MORE_DEVICES
1249    The specified site does not exist. ERROR_NO_SUCH_SITE

1250    A domain controller with the specified name already exists. ERROR_DOMAIN_CONTROLLER_EXISTS
1251    An error occurred while installing the Windows NT directory service. Please view the event log for more information. ERROR_DS_NOT_INSTALLED

1300    Not all privileges referenced are assigned to the caller. ERROR_NOT_ALL_ASSIGNED
1301    Some mapping between account names and security IDs was not done. ERROR_SOME_NOT_MAPPED
1302    No system quota limits are specifically set for this account. ERROR_NO_QUOTAS_FOR_ACCOUNT
1303    No encryption key is available. A well-known encryption key was returned. ERROR_LOCAL_USER_SESSION_KEY
1304    The Windows NT password is too complex to be converted to a LAN Manager password. The LAN Manager password returned is a NULL string. ERROR_NULL_LM_PASSWORD
1305    The revision level is unknown. ERROR_UNKNOWN_REVISION
1306    Indicates two revision levels are incompatible. ERROR_REVISION_MISMATCH
1307    This security ID may not be assigned as the owner of this object. ERROR_INVALID_OWNER
1308    This security ID may not be assigned as the primary group of an object. ERROR_INVALID_PRIMARY_GROUP
1309    An attempt has been made to operate on an impersonation token by a thread that is not currently impersonating a client. ERROR_NO_IMPERSONATION_TOKEN

1310    The group may not be disabled. ERROR_CANT_DISABLE_MANDATORY
1311    There are currently no logon servers available to service the logon request. ERROR_NO_LOGON_SERVERS
1312    A specified logon session does not exist. It may already have been terminated. ERROR_NO_SUCH_LOGON_SESSION
1313    A specified privilege does not exist. ERROR_NO_SUCH_PRIVILEGE
1314    A required privilege is not held by the client. ERROR_PRIVILEGE_NOT_HELD
1315    The name provided is not a properly formed account name. ERROR_INVALID_ACCOUNT_NAME
1316    The specified user already exists. ERROR_USER_EXISTS
1317    The specified user does not exist. ERROR_NO_SUCH_USER
1318    The specified group already exists. ERROR_GROUP_EXISTS
1319    The specified group does not exist. ERROR_NO_SUCH_GROUP

1320    Either the specified user account is already a member of the specified group, or the specified group cannot be deleted because it contains a member. ERROR_MEMBER_IN_GROUP
1321    The specified user account is not a member of the specified group account. ERROR_MEMBER_NOT_IN_GROUP
1322    The last remaining administration account cannot be disabled or deleted. ERROR_LAST_ADMIN
1323    Unable to update the password. The value provided as the current password is incorrect. ERROR_WRONG_PASSWORD
1324    Unable to update the password. The value provided for the new password contains values that are not allowed in passwords. ERROR_ILL_FORMED_PASSWORD
1325    Unable to update the password because a password update rule has been violated. ERROR_PASSWORD_RESTRICTION
1326    Logon failure: unknown user name or bad password. ERROR_LOGON_FAILURE
1327    Logon failure: user account restriction. ERROR_ACCOUNT_RESTRICTION
1328    Logon failure: account logon time restriction violation. ERROR_INVALID_LOGON_HOURS
1329    Logon failure: user not allowed to log on to this computer. ERROR_INVALID_WORKSTATION

1330    Logon failure: the specified account password has expired. ERROR_PASSWORD_EXPIRED
1331    Logon failure: account currently disabled. ERROR_ACCOUNT_DISABLED
1332    No mapping between account names and security IDs was done. ERROR_NONE_MAPPED
1333    Too many local user identifiers (LUIDs) were requested at one time. ERROR_TOO_MANY_LUIDS_REQUESTED
1334    No more local user identifiers (LUIDs) are available. ERROR_LUIDS_EXHAUSTED
1335    The subauthority part of a security ID is invalid for this particular use. ERROR_INVALID_SUB_AUTHORITY
1336    The access control list (ACL) structure is invalid. ERROR_INVALID_ACL
1337    The security ID structure is invalid. ERROR_INVALID_SID
1338    The security descriptor structure is invalid. ERROR_INVALID_SECURITY_DESCR

1340    The inherited access control list (ACL) or access control entry (ACE) could not be built. ERROR_BAD_INHERITANCE_ACL
1341    The server is currently disabled. ERROR_SERVER_DISABLED
1342    The server is currently enabled. ERROR_SERVER_NOT_DISABLED
1343    The value provided was an invalid value for an identifier authority. ERROR_INVALID_ID_AUTHORITY
1344    No more memory is available for security information updates. ERROR_ALLOTTED_SPACE_EXCEEDED
1345    The specified attributes are invalid, or incompatible with the attributes for the group as a whole. ERROR_INVALID_GROUP_ATTRIBUTES
1346    Either a required impersonation level was not provided, or the provided impersonation level is invalid. ERROR_BAD_IMPERSONATION_LEVEL
1347    Cannot open an anonymous level security token. ERROR_CANT_OPEN_ANONYMOUS
1348    The validation information class requested was invalid. ERROR_BAD_VALIDATION_CLASS
1349    The type of the token is inappropriate for its attempted use. ERROR_BAD_TOKEN_TYPE

1350    Unable to perform a security operation on an object that has no associated security. ERROR_NO_SECURITY_ON_OBJECT
1351    Indicates a Windows NT Server could not be contacted or that objects within the domain are protected such that necessary information could not be retrieved. ERROR_CANT_ACCESS_DOMAIN_INFO
1352    The security account manager (SAM) or local security authority (LSA) server was in the wrong state to perform the security operation. ERROR_INVALID_SERVER_STATE
1353    The domain was in the wrong state to perform the security operation. ERROR_INVALID_DOMAIN_STATE
1354    This operation is only allowed for the Primary Domain Controller of the domain. ERROR_INVALID_DOMAIN_ROLE
1355    The specified domain did not exist. ERROR_NO_SUCH_DOMAIN
1356    The specified domain already exists. ERROR_DOMAIN_EXISTS
1357    An attempt was made to exceed the limit on the number of domains per server. ERROR_DOMAIN_LIMIT_EXCEEDED
1358    Unable to complete the requested operation because of either a catastrophic media failure or a data structure corruption on the disk. ERROR_INTERNAL_DB_CORRUPTION
1359    The security account database contains an internal inconsistency. ERROR_INTERNAL_ERROR

1360    Generic access types were contained in an access mask which should already be mapped to nongeneric types. ERROR_GENERIC_NOT_MAPPED
1361    A security descriptor is not in the right format (absolute or self-relative). ERROR_BAD_DESCRIPTOR_FORMAT
1362    The requested action is restricted for use by logon processes only. The calling process has not registered as a logon process. ERROR_NOT_LOGON_PROCESS
1363    Cannot start a new logon session with an ID that is already in use. ERROR_LOGON_SESSION_EXISTS
1364    A specified authentication package is unknown. ERROR_NO_SUCH_PACKAGE
1365    The logon session is not in a state that is consistent with the requested operation. ERROR_BAD_LOGON_SESSION_STATE
1366    The logon session ID is already in use. ERROR_LOGON_SESSION_COLLISION
1367    A logon request contained an invalid logon type value. ERROR_INVALID_LOGON_TYPE
1368    Unable to impersonate using a named pipe until data has been read from that pipe. ERROR_CANNOT_IMPERSONATE
1369    The transaction state of a registry subtree is incompatible with the requested operation. ERROR_RXACT_INVALID_STATE

1370    An internal security database corruption has been encountered. ERROR_RXACT_COMMIT_FAILURE
1371    Cannot perform this operation on built-in accounts. ERROR_SPECIAL_ACCOUNT
1372    Cannot perform this operation on this built-in special group. ERROR_SPECIAL_GROUP
1373    Cannot perform this operation on this built-in special user. ERROR_SPECIAL_USER
1374    The user cannot be removed from a group because the group is currently the user's primary group. ERROR_MEMBERS_PRIMARY_GROUP
1375    The token is already in use as a primary token. ERROR_TOKEN_ALREADY_IN_USE
1376    The specified local group does not exist. ERROR_NO_SUCH_ALIAS
1377    The specified account name is not a member of the local group. ERROR_MEMBER_NOT_IN_ALIAS
1378    The specified account name is already a member of the local group. ERROR_MEMBER_IN_ALIAS
1379    The specified local group already exists. ERROR_ALIAS_EXISTS

1380    Logon failure: the user has not been granted the requested logon type at this computer. ERROR_LOGON_NOT_GRANTED
1381    The maximum number of secrets that may be stored in a single system has been exceeded. ERROR_TOO_MANY_SECRETS
1382    The length of a secret exceeds the maximum length allowed. ERROR_SECRET_TOO_LONG
1383    The local security authority database contains an internal inconsistency. ERROR_INTERNAL_DB_ERROR
1384    During a logon attempt, the user's security context accumulated too many security IDs. ERROR_TOO_MANY_CONTEXT_IDS
1385    Logon failure: the user has not been granted the requested logon type at this computer. ERROR_LOGON_TYPE_NOT_GRANTED
1386    A cross-encrypted password is necessary to change a user password. ERROR_NT_CROSS_ENCRYPTION_REQUIRED
1387    A new member could not be added to a local group because the member does not exist. ERROR_NO_SUCH_MEMBER
1388    A new member could not be added to a local group because the member has the wrong account type. ERROR_INVALID_MEMBER
1389    Too many security IDs have been specified. ERROR_TOO_MANY_SIDS

1390    A cross-encrypted password is necessary to change this user password. ERROR_LM_CROSS_ENCRYPTION_REQUIRED
1391    Indicates an ACL contains no inheritable components. ERROR_NO_INHERITANCE
1392    The file or directory is corrupted and unreadable. ERROR_FILE_CORRUPT
1393    The disk structure is corrupted and unreadable. ERROR_DISK_CORRUPT
1394    There is no user session key for the specified logon session. ERROR_NO_USER_SESSION_KEY
1395    The service being accessed is licensed for a particular number of connections. No more connections can be made to the service at this time because there are already as many connections as the service can accept. ERROR_LICENSE_QUOTA_EXCEEDED

1400    Invalid window handle. ERROR_INVALID_WINDOW_HANDLE
1401    Invalid menu handle. ERROR_INVALID_MENU_HANDLE
1402    Invalid cursor handle. ERROR_INVALID_CURSOR_HANDLE
1403    Invalid accelerator table handle. ERROR_INVALID_ACCEL_HANDLE
1404    Invalid hook handle. ERROR_INVALID_HOOK_HANDLE
1405    Invalid handle to a multiple-window position structure. ERROR_INVALID_DWP_HANDLE
1406    Cannot create a top-level child window. ERROR_TLW_WITH_WSCHILD
1407    Cannot find window class. ERROR_CANNOT_FIND_WND_CLASS
1408    Invalid window; it belongs to other thread. ERROR_WINDOW_OF_OTHER_THREAD
1409    Hot key is already registered. ERROR_HOTKEY_ALREADY_REGISTERED

1410    Class already exists. ERROR_CLASS_ALREADY_EXISTS
1411    Class does not exist. ERROR_CLASS_DOES_NOT_EXIST
1412    Class still has open windows. ERROR_CLASS_HAS_WINDOWS
1413    Invalid index. ERROR_INVALID_INDEX
1414    Invalid icon handle. ERROR_INVALID_ICON_HANDLE
1415    Using private DIALOG window words. ERROR_PRIVATE_DIALOG_INDEX
1416    The list box identifier was not found. ERROR_LISTBOX_ID_NOT_FOUND
1417    No wildcards were found. ERROR_NO_WILDCARD_CHARACTERS
1418    Thread does not have a clipboard open. ERROR_CLIPBOARD_NOT_OPEN
1419    Hot key is not registered. ERROR_HOTKEY_NOT_REGISTERED

1420    The window is not a valid dialog window. ERROR_WINDOW_NOT_DIALOG
1421    Control ID not found. ERROR_CONTROL_ID_NOT_FOUND
1422    Invalid message for a combo box because it does not have an edit control. ERROR_INVALID_COMBOBOX_MESSAGE
1423    The window is not a combo box. ERROR_WINDOW_NOT_COMBOBOX
1424    Height must be less than 256. ERROR_INVALID_EDIT_HEIGHT
1425    Invalid device context (DC) handle. ERROR_DC_NOT_FOUND
1426    Invalid hook procedure type. ERROR_INVALID_HOOK_FILTER
1427    Invalid hook procedure. ERROR_INVALID_FILTER_PROC
1428    Cannot set nonlocal hook without a module handle. ERROR_HOOK_NEEDS_HMOD
1429    This hook procedure can only be set globally. ERROR_GLOBAL_ONLY_HOOK

1430    The journal hook procedure is already installed. ERROR_JOURNAL_HOOK_SET
1431    The hook procedure is not installed. ERROR_HOOK_NOT_INSTALLED
1432    Invalid message for single-selection list box. ERROR_INVALID_LB_MESSAGE
1433    LB_SETCOUNT sent to non-lazy list box. ERROR_SETCOUNT_ON_BAD_LB
1434    This list box does not support tab stops. ERROR_LB_WITHOUT_TABSTOPS
1435    Cannot destroy object created by another thread. ERROR_DESTROY_OBJECT_OF_OTHER_THREAD
1436    Child windows cannot have menus. ERROR_CHILD_WINDOW_MENU
1437    The window does not have a system menu. ERROR_NO_SYSTEM_MENU
1438    Invalid message box style. ERROR_INVALID_MSGBOX_STYLE
1439    Invalid system-wide (SPI_*) parameter. ERROR_INVALID_SPI_VALUE

1440    Screen already locked. ERROR_SCREEN_ALREADY_LOCKED
1441    All handles to windows in a multiple-window position structure must have the same parent. ERROR_HWNDS_HAVE_DIFF_PARENT
1442    The window is not a child window. ERROR_NOT_CHILD_WINDOW
1443    Invalid GW_* command. ERROR_INVALID_GW_COMMAND
1444    Invalid thread identifier. ERROR_INVALID_THREAD_ID
1445    Cannot process a message from a window that is not a multiple document interface (MDI) window. ERROR_NON_MDICHILD_WINDOW
1446    Popup menu already active. ERROR_POPUP_ALREADY_ACTIVE
1447    The window does not have scroll bars. ERROR_NO_SCROLLBARS
1448    Scroll bar range cannot be greater than 0x7FFF. ERROR_INVALID_SCROLLBAR_RANGE
1449    Cannot show or remove the window in the way specified. ERROR_INVALID_SHOWWIN_COMMAND

1450    Insufficient system resources exist to complete the requested service. ERROR_NO_SYSTEM_RESOURCES
1451    Insufficient system resources exist to complete the requested service. ERROR_NONPAGED_SYSTEM_RESOURCES
1452    Insufficient system resources exist to complete the requested service. ERROR_PAGED_SYSTEM_RESOURCES
1453    Insufficient quota to complete the requested service. ERROR_WORKING_SET_QUOTA
1454    Insufficient quota to complete the requested service. ERROR_PAGEFILE_QUOTA
1455    The paging file is too small for this operation to complete. ERROR_COMMITMENT_LIMIT
1456    A menu item was not found. ERROR_MENU_ITEM_NOT_FOUND
1457    Invalid keyboard layout handle. ERROR_INVALID_KEYBOARD_HANDLE
1458    Hook type not allowed. ERROR_HOOK_TYPE_NOT_ALLOWED
1459    This operation requires an interactive window station. ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION

1460    This operation returned because the timeout period expired. ERROR_TIMEOUT
1461    Invalid monitor handle. ERROR_INVALID_MONITOR_HANDLE

1500    The event log file is corrupted. ERROR_EVENTLOG_FILE_CORRUPT
1501    No event log file could be opened, so the event logging service did not start. ERROR_EVENTLOG_CANT_START
1502    The event log file is full. ERROR_LOG_FILE_FULL
1503    The event log file has changed between read operations. ERROR_EVENTLOG_FILE_CHANGED
1601    Failure accessing install service. ERROR_INSTALL_SERVICE
1602    The user canceled the installation. ERROR_INSTALL_USEREXIT
1603    Fatal error during installation. ERROR_INSTALL_FAILURE
1604    Installation suspended, incomplete. ERROR_INSTALL_SUSPEND
1605    Product code not registered. ERROR_UNKNOWN_PRODUCT
1606    Feature ID not registered. ERROR_UNKNOWN_FEATURE
1607    Component ID not registered. ERROR_UNKNOWN_COMPONENT
1608    Unknown property. ERROR_UNKNOWN_PROPERTY
1609    Handle is in an invalid state. ERROR_INVALID_HANDLE_STATE

1610    Configuration data corrupt. ERROR_BAD_CONFIGURATION
1611    Language not available. ERROR_INDEX_ABSENT
1612    Install source unavailable. ERROR_INSTALL_SOURCE_ABSENT
1613    Database version unsupported. ERROR_BAD_DATABASE_VERSION
1614    Product is uninstalled. ERROR_PRODUCT_UNINSTALLED
1615    SQL query syntax invalid or unsupported. ERROR_BAD_QUERY_SYNTAX
1616    Record field does not exist. ERROR_INVALID_FIELD

1700    The string binding is invalid. RPC_S_INVALID_STRING_BINDING
1701    The binding handle is not the correct type. RPC_S_WRONG_KIND_OF_BINDING
1702    The binding handle is invalid. RPC_S_INVALID_BINDING
1703    The RPC protocol sequence is not supported. RPC_S_PROTSEQ_NOT_SUPPORTED
1704    The RPC protocol sequence is invalid. RPC_S_INVALID_RPC_PROTSEQ
1705    The string universal unique identifier (UUID) is invalid. RPC_S_INVALID_STRING_UUID
1706    The endpoint format is invalid. RPC_S_INVALID_ENDPOINT_FORMAT
1707    The network address is invalid. RPC_S_INVALID_NET_ADDR
1708    No endpoint was found. RPC_S_NO_ENDPOINT_FOUND
1709    The timeout value is invalid. RPC_S_INVALID_TIMEOUT

1710    The object universal unique identifier (UUID) was not found. RPC_S_OBJECT_NOT_FOUND
1711    The object universal unique identifier (UUID) has already been registered. RPC_S_ALREADY_REGISTERED
1712    The type universal unique identifier (UUID) has already been registered. RPC_S_TYPE_ALREADY_REGISTERED
1713    The RPC server is already listening. RPC_S_ALREADY_LISTENING
1714    No protocol sequences have been registered. RPC_S_NO_PROTSEQS_REGISTERED
1715    The RPC server is not listening. RPC_S_NOT_LISTENING
1716    The manager type is unknown. RPC_S_UNKNOWN_MGR_TYPE
1717    The interface is unknown. RPC_S_UNKNOWN_IF
1718    There are no bindings. RPC_S_NO_BINDINGS
1719    There are no protocol sequences. RPC_S_NO_PROTSEQS

1720    The endpoint cannot be created. RPC_S_CANT_CREATE_ENDPOINT
1721    Not enough resources are available to complete this operation. RPC_S_OUT_OF_RESOURCES
1722    The RPC server is unavailable. RPC_S_SERVER_UNAVAILABLE
1723    The RPC server is too busy to complete this operation. RPC_S_SERVER_TOO_BUSY
1724    The network options are invalid. RPC_S_INVALID_NETWORK_OPTIONS
1725    There are no remote procedure calls active on this thread. RPC_S_NO_CALL_ACTIVE
1726    The remote procedure call failed. RPC_S_CALL_FAILED
1727    The remote procedure call failed and did not execute. RPC_S_CALL_FAILED_DNE
1728    A remote procedure call (RPC) protocol error occurred. RPC_S_PROTOCOL_ERROR

1730    The transfer syntax is not supported by the RPC server. RPC_S_UNSUPPORTED_TRANS_SYN
1732    The universal unique identifier (UUID) type is not supported. RPC_S_UNSUPPORTED_TYPE
1733    The tag is invalid. RPC_S_INVALID_TAG
1734    The array bounds are invalid. RPC_S_INVALID_BOUND
1735    The binding does not contain an entry name. RPC_S_NO_ENTRY_NAME
1736    The name syntax is invalid. RPC_S_INVALID_NAME_SYNTAX
1737    The name syntax is not supported. RPC_S_UNSUPPORTED_NAME_SYNTAX
1739    No network address is available to use to construct a universal unique identifier (UUID). RPC_S_UUID_NO_ADDRESS

1740    The endpoint is a duplicate. RPC_S_DUPLICATE_ENDPOINT
1741    The authentication type is unknown. RPC_S_UNKNOWN_AUTHN_TYPE
1742    The maximum number of calls is too small. RPC_S_MAX_CALLS_TOO_SMALL
1743    The string is too long. RPC_S_STRING_TOO_LONG
1744    The RPC protocol sequence was not found. RPC_S_PROTSEQ_NOT_FOUND
1745    The procedure number is out of range. RPC_S_PROCNUM_OUT_OF_RANGE
1746    The binding does not contain any authentication information. RPC_S_BINDING_HAS_NO_AUTH
1747    The authentication service is unknown. RPC_S_UNKNOWN_AUTHN_SERVICE
1748    The authentication level is unknown. RPC_S_UNKNOWN_AUTHN_LEVEL
1749    The security context is invalid. RPC_S_INVALID_AUTH_IDENTITY

1750    The authorization service is unknown. RPC_S_UNKNOWN_AUTHZ_SERVICE
1751    The entry is invalid. EPT_S_INVALID_ENTRY
1752    The server endpoint cannot perform the operation. EPT_S_CANT_PERFORM_OP
1753    There are no more endpoints available from the endpoint mapper. EPT_S_NOT_REGISTERED
1754    No interfaces have been exported. RPC_S_NOTHING_TO_EXPORT
1755    The entry name is incomplete. RPC_S_INCOMPLETE_NAME
1756    The version option is invalid. RPC_S_INVALID_VERS_OPTION
1757    There are no more members. RPC_S_NO_MORE_MEMBERS
1758    There is nothing to unexport. RPC_S_NOT_ALL_OBJS_UNEXPORTED
1759    The interface was not found. RPC_S_INTERFACE_NOT_FOUND

1760    The entry already exists. RPC_S_ENTRY_ALREADY_EXISTS
1761    The entry is not found. RPC_S_ENTRY_NOT_FOUND
1762    The name service is unavailable. RPC_S_NAME_SERVICE_UNAVAILABLE
1763    The network address family is invalid. RPC_S_INVALID_NAF_ID
1764    The requested operation is not supported. RPC_S_CANNOT_SUPPORT
1765    No security context is available to allow impersonation. RPC_S_NO_CONTEXT_AVAILABLE
1766    An internal error occurred in a remote procedure call (RPC). RPC_S_INTERNAL_ERROR
1767    The RPC server attempted an integer division by zero. RPC_S_ZERO_DIVIDE
1768    An addressing error occurred in the RPC server. RPC_S_ADDRESS_ERROR
1769    A floating-point operation at the RPC server caused a division by zero. RPC_S_FP_DIV_ZERO

1770    A floating-point underflow occurred at the RPC server. RPC_S_FP_UNDERFLOW
1771    A floating-point overflow occurred at the RPC server. RPC_S_FP_OVERFLOW
1772    The list of RPC servers available for the binding of auto handles has been exhausted. RPC_X_NO_MORE_ENTRIES
1773    Unable to open the character translation table file. RPC_X_SS_CHAR_TRANS_OPEN_FAIL
1774    The file containing the character translation table has fewer than bytes. RPC_X_SS_CHAR_TRANS_SHORT_FILE
1775    A null context handle was passed from the client to the host during a remote procedure call. RPC_X_SS_IN_NULL_CONTEXT
1777    The context handle changed during a remote procedure call. RPC_X_SS_CONTEXT_DAMAGED
1778    The binding handles passed to a remote procedure call do not match. RPC_X_SS_HANDLES_MISMATCH
1779    The stub is unable to get the remote procedure call handle. RPC_X_SS_CANNOT_GET_CALL_HANDLE

1780    A null reference pointer was passed to the stub. RPC_X_NULL_REF_POINTER
1781    The enumeration value is out of range. RPC_X_ENUM_VALUE_OUT_OF_RANGE
1782    The byte count is too small. RPC_X_BYTE_COUNT_TOO_SMALL
1783    The stub received bad data. RPC_X_BAD_STUB_DATA
1784    The supplied user buffer is not valid for the requested operation. ERROR_INVALID_USER_BUFFER
1785    The disk media is not recognized. It may not be formatted. ERROR_UNRECOGNIZED_MEDIA
1786    The workstation does not have a trust secret. ERROR_NO_TRUST_LSA_SECRET
1787    The SAM database on the Windows NT Server does not have a computer account for this workstation trust relationship. ERROR_NO_TRUST_SAM_ACCOUNT
1788    The trust relationship between the primary domain and the trusted domain failed. ERROR_TRUSTED_DOMAIN_FAILURE
1789    The trust relationship between this workstation and the primary domain failed. ERROR_TRUSTED_RELATIONSHIP_FAILURE

1790    The network logon failed. ERROR_TRUST_FAILURE
1791    A remote procedure call is already in progress for this thread. RPC_S_CALL_IN_PROGRESS
1792    An attempt was made to logon, but the network logon service was not started. ERROR_NETLOGON_NOT_STARTED
1793    The user's account has expired. ERROR_ACCOUNT_EXPIRED
1794    The redirector is in use and cannot be unloaded. ERROR_REDIRECTOR_HAS_OPEN_HANDLES
1795    The specified printer driver is already installed. ERROR_PRINTER_DRIVER_ALREADY_INSTALLED
1796    The specified port is unknown. ERROR_UNKNOWN_PORT
1797    The printer driver is unknown. ERROR_UNKNOWN_PRINTER_DRIVER
1798    The print processor is unknown. ERROR_UNKNOWN_PRINTPROCESSOR
1799    The specified separator file is invalid. ERROR_INVALID_SEPARATOR_FILE

1800    The specified priority is invalid. ERROR_INVALID_PRIORITY
1801    The printer name is invalid. ERROR_INVALID_PRINTER_NAME
1802    The printer already exists. ERROR_PRINTER_ALREADY_EXISTS
1803    The printer command is invalid. ERROR_INVALID_PRINTER_COMMAND
1804    The specified datatype is invalid. ERROR_INVALID_DATATYPE
1805    The environment specified is invalid. ERROR_INVALID_ENVIRONMENT
1806    There are no more bindings. RPC_S_NO_MORE_BINDINGS
1807    The account used is an interdomain trust account. Use your global user account or local user account to access this server. ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
1808    The account used is a computer account. Use your global user account or local user account to access this server. ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT
1809    The account used is a server trust account. Use your global user account or local user account to access this server. ERROR_NOLOGON_SERVER_TRUST_ACCOUNT

1810    The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain. ERROR_DOMAIN_TRUST_INCONSISTENT
1811    The server is in use and cannot be unloaded. ERROR_SERVER_HAS_OPEN_HANDLES
1812    The specified image file did not contain a resource section. ERROR_RESOURCE_DATA_NOT_FOUND
1813    The specified resource type cannot be found in the image file. ERROR_RESOURCE_TYPE_NOT_FOUND
1814    The specified resource name cannot be found in the image file. ERROR_RESOURCE_NAME_NOT_FOUND
1815    The specified resource language ID cannot be found in the image file. ERROR_RESOURCE_LANG_NOT_FOUND
1816    Not enough quota is available to process this command. ERROR_NOT_ENOUGH_QUOTA
1817    No interfaces have been registered. RPC_S_NO_INTERFACES
1818    The remote procedure call was cancelled. RPC_S_CALL_CANCELLED
1819    The binding handle does not contain all required information. RPC_S_BINDING_INCOMPLETE

1820    A communications failure occurred during a remote procedure call. RPC_S_COMM_FAILURE
1821    The requested authentication level is not supported. RPC_S_UNSUPPORTED_AUTHN_LEVEL
1822    No principal name registered. RPC_S_NO_PRINC_NAME
1823    The error specified is not a valid Windows RPC error code. RPC_S_NOT_RPC_ERROR
1824    A UUID that is valid only on this computer has been allocated. RPC_S_UUID_LOCAL_ONLY
1825    A security package specific error occurred. RPC_S_SEC_PKG_ERROR
1826    Thread is not canceled. RPC_S_NOT_CANCELLED
1827    Invalid operation on the encoding/decoding handle. RPC_X_INVALID_ES_ACTION
1828    Incompatible version of the serializing package. RPC_X_WRONG_ES_VERSION
1829    Incompatible version of the RPC stub. RPC_X_WRONG_STUB_VERSION

1830    The RPC pipe object is invalid or corrupted. RPC_X_INVALID_PIPE_OBJECT
1831    An invalid operation was attempted on an RPC pipe object. RPC_X_WRONG_PIPE_ORDER
1832    Unsupported RPC pipe version. RPC_X_WRONG_PIPE_VERSION
1898    The group member was not found. RPC_S_GROUP_MEMBER_NOT_FOUND
1899    The endpoint mapper database entry could not be created. EPT_S_CANT_CREATE

1900    The object universal unique identifier (UUID) is the nil UUID. RPC_S_INVALID_OBJECT
1901    The specified time is invalid. ERROR_INVALID_TIME
1902    The specified form name is invalid. ERROR_INVALID_FORM_NAME
1903    The specified form size is invalid. ERROR_INVALID_FORM_SIZE
1904    The specified printer handle is already being waited on ERROR_ALREADY_WAITING
1905    The specified printer has been deleted. ERROR_PRINTER_DELETED
1906    The state of the printer is invalid. ERROR_INVALID_PRINTER_STATE
1907    The user must change his password before he logs on the first time. ERROR_PASSWORD_MUST_CHANGE
1908    Could not find the domain controller for this domain. ERROR_DOMAIN_CONTROLLER_NOT_FOUND
1909    The referenced account is currently locked out and may not be logged on to. ERROR_ACCOUNT_LOCKED_OUT

1910    The object exporter specified was not found. OR_INVALID_OXID
1911    The object specified was not found. OR_INVALID_OID
1912    The object resolver set specified was not found. OR_INVALID_SET
1913    Some data remains to be sent in the request buffer. RPC_S_SEND_INCOMPLETE
1914    Invalid asynchronous remote procedure call handle. RPC_S_INVALID_ASYNC_HANDLE
1915    Invalid asynchronous RPC call handle for this operation. RPC_S_INVALID_ASYNC_CALL
1916    The RPC pipe object has already been closed. RPC_X_PIPE_CLOSED
1917    The RPC call completed before all pipes were processed. RPC_X_PIPE_DISCIPLINE_ERROR
1918    No more data is available from the RPC pipe. RPC_X_PIPE_EMPTY
1919    No site name is available for this machine. ERROR_NO_SITENAME

1920    The file can not be accessed by the system. ERROR_CANT_ACCESS_FILE
1921    The name of the file cannot be resolved by the system. ERROR_CANT_RESOLVE_FILENAME
1922    The directory service evaluated group memberships locally. ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY
1923    The specified directory service attribute or value does not exist. ERROR_DS_NO_ATTRIBUTE_OR_VALUE
1924    The attribute syntax specified to the directory service is invalid. ERROR_DS_INVALID_ATTRIBUTE_SYNTAX
1925    The attribute type specified to the directory service is not defined. ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED
1926    The specified directory service attribute or value already exists. ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS
1927    The directory service is busy. ERROR_DS_BUSY
1928    The directory service is unavailable. ERROR_DS_UNAVAILABLE
1929    The directory service was unable to allocate a relative identifier. ERROR_DS_NO_RIDS_ALLOCATED

1930    The directory service has exhausted the pool of relative identifiers. ERROR_DS_NO_MORE_RIDS
1931    The requested operation could not be performed because the directory service is not the master for that type of operation. ERROR_DS_INCORRECT_ROLE_OWNER
1932    The directory service was unable to initialize the subsystem that allocates relative identifiers. ERROR_DS_RIDMGR_INIT_ERROR
1933    The requested operation did not satisfy one or more constraints associated with the class of the object. ERROR_DS_OBJ_CLASS_VIOLATION
1934    The directory service can perform the requested operation only on a leaf object. ERROR_DS_CANT_ON_NON_LEAF
1935    The directory service cannot perform the requested operation on the RDN attribute of an object. ERROR_DS_CANT_ON_RDN
1936    The directory service detected an attempt to modify the object class of an object. ERROR_DS_CANT_MOD_OBJ_CLASS
1937    The requested cross domain move operation could not be performed. ERROR_DS_CROSS_DOM_MOVE_ERROR
1938    Unable to contact the global catalog server. ERROR_DS_GC_NOT_AVAILABLE

2000    The pixel format is invalid. ERROR_INVALID_PIXEL_FORMAT
2001    The specified driver is invalid. ERROR_BAD_DRIVER
2002    The window style or class attribute is invalid for this operation. ERROR_INVALID_WINDOW_STYLE
2003    The requested metafile operation is not supported. ERROR_METAFILE_NOT_SUPPORTED
2004    The requested transformation operation is not supported. ERROR_TRANSFORM_NOT_SUPPORTED
2005    The requested clipping operation is not supported. ERROR_CLIPPING_NOT_SUPPORTED

2108    The network connection was made successfully, but the user had to be prompted for a password other than the one originally specified. ERROR_CONNECTED_OTHER_PASSWORD

2202    The specified username is invalid. ERROR_BAD_USERNAME

2250    This network connection does not exist. ERROR_NOT_CONNECTED

2300    The specified color management module is invalid. ERROR_INVALID_CMM
2301    The specified color profile is invalid. ERROR_INVALID_PROFILE
2302    The specified tag was not found. ERROR_TAG_NOT_FOUND
2303    A required tag is not present. ERROR_TAG_NOT_PRESENT
2304    The specified tag is already present. ERROR_DUPLICATE_TAG
2305    The specified color profile is not associated with any device. ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE
2306    The specified color profile was not found. ERROR_PROFILE_NOT_FOUND
2307    The specified color space is invalid. ERROR_INVALID_COLORSPACE
2308    Image Color Management is not enabled. ERROR_ICM_NOT_ENABLED
2309    There was an error while deleting the color transform. ERROR_DELETING_ICM_XFORM

2310    The specified color transform is invalid. ERROR_INVALID_TRANSFORM

2401    This network connection has files open or requests pending. ERROR_OPEN_FILES
2402    Active connections still exist. ERROR_ACTIVE_CONNECTIONS
2404    The device is in use by an active process and cannot be disconnected. ERROR_DEVICE_IN_USE

3000    The specified print monitor is unknown. ERROR_UNKNOWN_PRINT_MONITOR
3001    The specified printer driver is currently in use. ERROR_PRINTER_DRIVER_IN_USE
3002    The spool file was not found. ERROR_SPOOL_FILE_NOT_FOUND
3003    A StartDocPrinter call was not issued. ERROR_SPL_NO_STARTDOC
3004    An AddJob call was not issued. ERROR_SPL_NO_ADDJOB
3005    The specified print processor has already been installed. ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED
3006    The specified print monitor has already been installed. ERROR_PRINT_MONITOR_ALREADY_INSTALLED
3007    The specified print monitor does not have the required functions. ERROR_INVALID_PRINT_MONITOR
3008    The specified print monitor is currently in use. ERROR_PRINT_MONITOR_IN_USE
3009    The requested operation is not allowed when there are jobs queued to the printer. ERROR_PRINTER_HAS_JOBS_QUEUED

3010    The requested operation is successful. Changes will not be effective until the system is rebooted. ERROR_SUCCESS_REBOOT_REQUIRED
3011    The requested operation is successful. Changes will not be effective until the service is restarted. ERROR_SUCCESS_RESTART_REQUIRED

4000    WINS encountered an error while processing the command. ERROR_WINS_INTERNAL
4001    The local WINS can not be deleted. ERROR_CAN_NOT_DEL_LOCAL_WINS
4002    The importation from the file failed. ERROR_STATIC_INIT
4003    The backup failed. Was a full backup done before? ERROR_INC_BACKUP
4004    The backup failed. Check the directory to which you are backing the database. ERROR_FULL_BACKUP
4005    The name does not exist in the WINS database. ERROR_REC_NON_EXISTENT
4006    Replication with a nonconfigured partner is not allowed. ERROR_RPL_NOT_ALLOWED

4100    The DHCP client has obtained an IP address that is already in use on the network. The local interface will be disabled until the DHCP client can obtain a new address. ERROR_DHCP_ADDRESS_CONFLICT

4200    The GUID passed was not recognized as valid by a WMI data provider. ERROR_WMI_GUID_NOT_FOUND
4201    The instance name passed was not recognized as valid by a WMI data provider. ERROR_WMI_INSTANCE_NOT_FOUND
4202    The data item ID passed was not recognized as valid by a WMI data provider. ERROR_WMI_ITEMID_NOT_FOUND
4203    The WMI request could not be completed and should be retried. ERROR_WMI_TRY_AGAIN
4204    The WMI data provider could not be located. ERROR_WMI_DP_NOT_FOUND
4205    The WMI data provider references an instance set that has not been registered. ERROR_WMI_UNRESOLVED_INSTANCE_REF
4206    The WMI data block or event notification has already been enabled. ERROR_WMI_ALREADY_ENABLED
4207    The WMI data block is no longer available. ERROR_WMI_GUID_DISCONNECTED
4208    The WMI data service is not available. ERROR_WMI_SERVER_UNAVAILABLE
4209    The WMI data provider failed to carry out the request. ERROR_WMI_DP_FAILED

4210    The WMI MOF information is not valid. ERROR_WMI_INVALID_MOF
4211    The WMI registration information is not valid. ERROR_WMI_INVALID_REGINFO

4300    The media identifier does not represent a valid medium. ERROR_INVALID_MEDIA
4301    The library identifier does not represent a valid library. ERROR_INVALID_LIBRARY
4302    The media pool identifier does not represent a valid media pool. ERROR_INVALID_MEDIA_POOL
4303    The drive and medium are not compatible or exist in different libraries. ERROR_DRIVE_MEDIA_MISMATCH
4304    The medium currently exists in an offline library and must be online to perform this operation. ERROR_MEDIA_OFFLINE
4305    The operation cannot be performed on an offline library. ERROR_LIBRARY_OFFLINE
4306    The library, drive, or media pool is empty. ERROR_EMPTY
4307    The library, drive, or media pool must be empty to perform this operation. ERROR_NOT_EMPTY
4308    No media is currently available in this media pool or library. ERROR_MEDIA_UNAVAILABLE
4309    A resource required for this operation is disabled. ERROR_RESOURCE_DISABLED

4310    The media identifier does not represent a valid cleaner. ERROR_INVALID_CLEANER
4311    The drive cannot be cleaned or does not support cleaning. ERROR_UNABLE_TO_CLEAN
4312    The object identifier does not represent a valid object. ERROR_OBJECT_NOT_FOUND
4313    Unable to read from or write to the database. ERROR_DATABASE_FAILURE
4314    The database is full. ERROR_DATABASE_FULL
4315    The medium is not compatible with the device or media pool. ERROR_MEDIA_INCOMPATIBLE
4316    The resource required for this operation does not exist. ERROR_RESOURCE_NOT_PRESENT
4317    The operation identifier is not valid. ERROR_INVALID_OPERATION
4318    The media is not mounted or ready for use. ERROR_MEDIA_NOT_AVAILABLE
4319    The device is not ready for use. ERROR_DEVICE_NOT_AVAILABLE

4320    The operator or administrator has refused the request. ERROR_REQUEST_REFUSED

4350    The remote storage service was not able to recall the file. ERROR_FILE_OFFLINE
4351    The remote storage service is not operational at this time. ERROR_REMOTE_STORAGE_NOT_ACTIVE
4352    The remote storage service encountered a media error. ERROR_REMOTE_STORAGE_MEDIA_ERROR

4390    The file or directory is not a reparse point. ERROR_NOT_A_REPARSE_POINT
4391    The reparse point attribute cannot be set because it conflicts with an existing attribute. ERROR_REPARSE_ATTRIBUTE_CONFLICT

5001    The cluster resource cannot be moved to another group because other resources are dependent on it. ERROR_DEPENDENT_RESOURCE_EXISTS
5002    The cluster resource dependency cannot be found. ERROR_DEPENDENCY_NOT_FOUND
5003    The cluster resource cannot be made dependent on the specified resource because it is already dependent. ERROR_DEPENDENCY_ALREADY_EXISTS
5004    The cluster resource is not online. ERROR_RESOURCE_NOT_ONLINE
5005    A cluster node is not available for this operation. ERROR_HOST_NODE_NOT_AVAILABLE
5006    The cluster resource is not available. ERROR_RESOURCE_NOT_AVAILABLE
5007    The cluster resource could not be found. ERROR_RESOURCE_NOT_FOUND
5008    The cluster is being shut down. ERROR_SHUTDOWN_CLUSTER
5009    A cluster node cannot be evicted from the cluster while it is online. ERROR_CANT_EVICT_ACTIVE_NODE

5010    The object already exists. ERROR_OBJECT_ALREADY_EXISTS
5011    The object is already in the list. ERROR_OBJECT_IN_LIST
5012    The cluster group is not available for any new requests. ERROR_GROUP_NOT_AVAILABLE
5013    The cluster group could not be found. ERROR_GROUP_NOT_FOUND
5014    The operation could not be completed because the cluster group is not online. ERROR_GROUP_NOT_ONLINE
5015    The cluster node is not the owner of the resource. ERROR_HOST_NODE_NOT_RESOURCE_OWNER
5016    The cluster node is not the owner of the group. ERROR_HOST_NODE_NOT_GROUP_OWNER
5017    The cluster resource could not be created in the specified resource monitor. ERROR_RESMON_CREATE_FAILED
5018    The cluster resource could not be brought online by the resource monitor. ERROR_RESMON_ONLINE_FAILED
5019    The operation could not be completed because the cluster resource is online. ERROR_RESOURCE_ONLINE

5020    The cluster resource could not be deleted or brought offline because it is the quorum resource. ERROR_QUORUM_RESOURCE
5021    The cluster could not make the specified resource a quorum resource because it is not capable of being a quorum resource. ERROR_NOT_QUORUM_CAPABLE
5022    The cluster software is shutting down. ERROR_CLUSTER_SHUTTING_DOWN
5023    The group or resource is not in the correct state to perform the requested operation. ERROR_INVALID_STATE
5024    The properties were stored but not all changes will take effect until the next time the resource is brought online. ERROR_RESOURCE_PROPERTIES_STORED
5025    The cluster could not make the specified resource a quorum resource because it does not belong to a shared storage class. ERROR_NOT_QUORUM_CLASS
5026    The cluster resource could not be deleted since it is a core resource. ERROR_CORE_RESOURCE
5027    The quorum resource failed to come online. ERROR_QUORUM_RESOURCE_ONLINE_FAILED
5028    The quorum log could not be created or mounted successfully. ERROR_QUORUMLOG_OPEN_FAILED
5029    The cluster log is corrupt. ERROR_CLUSTERLOG_CORRUPT

5030    The record could not be written to the cluster log since it exceeds the maximum size. ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE
5031    The cluster log exceeds its maximum size. ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE
5032    No checkpoint record was found in the cluster log. ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND
5033    The minimum required disk space needed for logging is not available. ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE

6000    The specified file could not be encrypted. ERROR_ENCRYPTION_FAILED
6001    The specified file could not be decrypted. ERROR_DECRYPTION_FAILED
6002    The specified file is encrypted and the user does not have the ability to decrypt it. ERROR_FILE_ENCRYPTED
6003    There is no encryption recovery policy configured for this system. ERROR_NO_RECOVERY_POLICY
6004    The required encryption driver is not loaded for this system. ERROR_NO_EFS
6005    The file was encrypted with a different encryption driver than is currently loaded. ERROR_WRONG_EFS
6006    There are no EFS keys defined for the user. ERROR_NO_USER_KEYS
6007    The specified file is not encrypted. ERROR_FILE_NOT_ENCRYPTED
6008    The specified file is not in the defined EFS export format. ERROR_NOT_EXPORT_FORMAT

6118    The list of servers for this workgroup is not currently available ERROR_NO_BROWSER_SERVERS_FOUND

Source: C:\AA\Src20020607\EnHlp\html\erro9kq8.htm - (112)


Error-codes (Win32-Net)

Win32 - Net Error Codes

Translated by Obbe-Jan Bakker

Win32 - Net Error Codes

2102    The workstation driver is not installed. NETERR_INCLUDED
2103    The server could not be located. NERR_UnknownServer
2104    An internal error occurred. The network cannot access a shared memory segment. NERR_ShareMem
2105    A network resource shortage occurred . NERR_NoNetworkResource
2106    This operation is not supported on workstations. NERR_RemoteOnly
2107    The device is not connected. NERR_DevNotRedirected

2114    The Server service is not started. NERR_ServerNotStarted
2115    The queue is empty. NERR_ItemNotFound
2116    The device or directory does not exist. NERR_UnknownDevDir
2117    The operation is invalid on a redirected resource. NERR_RedirectedPath
2118    The name has already been shared. NERR_DuplicateShare
2119    The server is currently out of the requested resource. NERR_NoRoom

2121    Requested addition of items exceeds the maximum allowed. NERR_TooManyItems
2122    The Peer service supports only two simultaneous users. NERR_InvalidMaxUsers
2123    The API return buffer is too small. NERR_BufTooSmall
2127    A remote API error occurred. NERR_RemoteErr

2131    An error occurred when opening or reading the configuration file. NERR_LanmanIniError
2136    A general network error occurred. NERR_NetworkError
2137    The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service. NERR_WkstaInconsistentState
2138    The Workstation service has not been started. NERR_WkstaNotStarted
2139    The requested information is not available. NERR_BrowserNotStarted

2140    An internal Windows NT error occurred.NERR_InternalError
2141    The server is not configured for transactions. NERR_BadTransactConfig
2142    The requested API is not supported on the remote server. NERR_InvalidAPI
2143    The event name is invalid. NERR_BadEventName
2144    The computer name already exists on the network. Change it and restart the computer. NERR_DupNameReboot
2146    The specified component could not be found in the configuration information. NERR_CfgCompNotFound
2147    The specified parameter could not be found in the configuration information. NERR_CfgParamNotFound
2149    A line in the configuration file is too long. NERR_LineTooLong

2150    The printer does not exist. NERR_QNotFound
2151    The print job does not exist. NERR_JobNotFound
2152    The printer destination cannot be found. NERR_DestNotFound
2153    The printer destination already exists. NERR_DestExists
2154    The printer queue already exists. NERR_QExists
2155    No more printers can be added. NERR_QNoRoom
2156    No more print jobs can be added. NERR_JobNoRoom
2157    No more printer destinations can be added. NERR_DestNoRoom
2158    This printer destination is idle and cannot accept control operations. NERR_DestIdle
2159    This printer destination request contains an invalid control function. NERR_DestInvalidOp

2160    The print processor is not responding. NERR_ProcNoRespond
2161    The spooler is not running. NERR_SpoolerNotLoaded
2162    This operation cannot be performed on the print destination in its current state. NERR_DestInvalidState
2163    This operation cannot be performed on the printer queue in its current state. NERR_QInvalidState
2164    This operation cannot be performed on the print job in its current state. NERR_JobInvalidState
2165    A spooler memory allocation failure occurred. NERR_SpoolNoMemory
2166    The device driver does not exist. NERR_DriverNotFound
2167    The data type is not supported by the print processor. NERR_DataTypeInvalid
2168    The print processor is not installed. NERR_ProcNotFound

2180    The service database is locked. NERR_ServiceTableLocked
2181    The service table is full. NERR_ServiceTableFull
2182    The requested service has already been started. NERR_ServiceInstalled
2183    The service does not respond to control actions. NERR_ServiceEntryLocked
2184    The service has not been started. NERR_ServiceNotInstalled
2185    The service name is invalid. NERR_BadServiceName
2186    The service is not responding to the control function. NERR_ServiceCtlTimeout
2187    The service control is busy. NERR_ServiceCtlBusy
2188    The configuration file contains an invalid service program name. NERR_BadServiceProgName
2189    The service could not be controlled in its present state. NERR_ServiceNotCtrl

2190    The service ended abnormally. NERR_ServiceKillProc
2191    The requested pause or stop is not valid for this service. NERR_ServiceCtlNotValid
2192    The service control dispatcher could not find the service name in the dispatch table. NERR_NotInDispatchTbl
2193    The service control dispatcher pipe read failed. NERR_BadControlRecv
2194    A thread for the new service could not be created. NERR_ServiceNotStarting

2200    This workstation is already logged on to the local-area network. NERR_AlreadyLoggedOn
2201    The workstation is not logged on to the local-area network. NERR_NotLoggedOn
2202    The user name or group name parameter is invalid. NERR_BadUsername
2203    The password parameter is invalid. NERR_BadPassword
2204    @W The logon processor did not add the message alias. NERR_UnableToAddName_W
2205    The logon processor did not add the message alias. NERR_UnableToAddName_F
2206    @W The logoff processor did not delete the message alias. NERR_UnableToDelName_W
2207    The logoff processor did not delete the message alias. NERR_UnableToDelName_F
2209    Network logons are paused. NERR_LogonsPaused

2210    A centralized logon-server conflict occurred. NERR_LogonServerConflict
2211    The server is configured without a valid user path. NERR_LogonNoUserPath
2212    An error occurred while loading or running the logon script. NERR_LogonScriptError
2214    The logon server was not specified. Your computer will be logged on as STANDALONE. NERR_StandaloneLogon
2215    The logon server could not be found. NERR_LogonServerNotFound
2216    There is already a logon domain for this computer. NERR_LogonDomainExists
2217    The logon server could not validate the logon. NERR_NonValidatedLogon
2219    The security database could not be found. NERR_ACFNotFound

2220    The group name could not be found. NERR_GroupNotFound
2221    The user name could not be found. NERR_UserNotFound
2222    The resource name could not be found. NERR_ResourceNotFound
2223    The group already exists. NERR_GroupExists
2224    The user account already exists. NERR_UserExists
2225    The resource permission list already exists. NERR_ResourceExists
2226    This operation is only allowed on the primary domain controller of the domain. NERR_NotPrimary
2227    The security database has not been started. NERR_ACFNotLoaded
2228    There are too many names in the user accounts database. NERR_ACFNoRoom
2229    A disk I/O failure occurred.NERR_ACFFileIOFail

2230    The limit of 64 entries per resource was exceeded. NERR_ACFTooManyLists
2231    Deleting a user with a session is not allowed. NERR_UserLogon
2232    The parent directory could not be located. NERR_ACFNoParent
2233    Unable to add to the security database session cache segment. NERR_CanNotGrowSegment
2234    This operation is not allowed on this special group. NERR_SpeGroupOp
2235    This user is not cached in user accounts database session cache. NERR_NotInCache
2236    The user already belongs to this group. NERR_UserInGroup
2237    The user does not belong to this group. NERR_UserNotInGroup
2238    This user account is undefined. NERR_AccountUndefined
2239    This user account has expired. NERR_AccountExpired

2240    The user is not allowed to log on from this workstation. NERR_InvalidWorkstation
2241    The user is not allowed to log on at this time. NERR_InvalidLogonHours
2242    The password of this user has expired. NERR_PasswordExpired
2243    The password of this user cannot change. NERR_PasswordCantChange
2244    This password cannot be used now. NERR_PasswordHistConflict
2245    The password is shorter than required. NERR_PasswordTooShort
2246    The password of this user is too recent to change. NERR_PasswordTooRecent
2247    The security database is corrupted. NERR_InvalidDatabase
2248    No updates are necessary to this replicant network/local security database. NERR_DatabaseUpToDate
2249    This replicant database is outdated; synchronization is required. NERR_SyncRequired

2250    The network connection could not be found. NERR_UseNotFound
2251    This asg_type is invalid. NERR_BadAsgType
2252    This device is currently being shared. NERR_DeviceIsShared

2270    The computer name could not be added as a message alias. The name may already exist on the network. NERR_NoComputerName
2271    The Messenger service is already started. NERR_MsgAlreadyStarted
2272    The Messenger service failed to start. NERR_MsgInitFailed
2273    The message alias could not be found on the network. NERR_NameNotFound
2274    This message alias has already been forwarded. NERR_AlreadyForwarded
2275    This message alias has been added but is still forwarded. NERR_AddForwarded
2276    This message alias already exists locally. NERR_AlreadyExists
2277    The maximum number of added message aliases has been exceeded. NERR_TooManyNames
2278    The computer name could not be deleted.NERR_DelComputerName
2279    Messages cannot be forwarded back to the same workstation. NERR_LocalForward

2280    An error occurred in the domain message processor. NERR_GrpMsgProcessor
2281    The message was sent, but the recipient has paused the Messenger service. NERR_PausedRemote
2282    The message was sent but not received. NERR_BadReceive
2283    The message alias is currently in use. Try again later. NERR_NameInUse
2284    The Messenger service has not been started. NERR_MsgNotStarted
2285    The name is not on the local computer. NERR_NotLocalName
2286    The forwarded message alias could not be found on the network. NERR_NoForwardName
2287    The message alias table on the remote station is full. NERR_RemoteFull
2288    Messages for this alias are not currently being forwarded. NERR_NameNotForwarded
2289    The broadcast message was truncated. NERR_TruncatedBroadcast

2294    This is an invalid device name. NERR_InvalidDevice
2295    A write fault occurred. NERR_WriteFault
2297    A duplicate message alias exists on the network. NERR_DuplicateName
2298    @W This message alias will be deleted later. NERR_DeleteLater
2299    The message alias was not successfully deleted from all networks. NERR_IncompleteDel

2300    This operation is not supported on computers with multiple networks. NERR_MultipleNets

2310    This shared resource does not exist.NERR_NetNameNotFound
2311    This device is not shared. NERR_DeviceNotShared
2312    A session does not exist with that computer name. NERR_ClientNameNotFound
2314    There is not an open file with that identification number. NERR_FileIdNotFound
2315    A failure occurred when executing a remote administration command. NERR_ExecFailure
2316    A failure occurred when opening a remote temporary file. NERR_TmpFile
2317    The data returned from a remote administration command has been truncated to 64K. NERR_TooMuchData
2318    This device cannot be shared as both a spooled and a non-spooled resource. NERR_DeviceShareConflict
2319    The information in the list of servers may be incorrect. NERR_BrowserTableIncomplete

2320    The computer is not active in this domain. NERR_NotLocalDomain
2321    The share must be removed from the Distributed File System before it can be deleted. NERR_IsDfsShare
2331    The operation is invalid for this device. NERR_DevInvalidOpCode
2332    This device cannot be shared. NERR_DevNotFound
2333    This device was not open. NERR_DevNotOpen
2334    This device name list is invalid. NERR_BadQueueDevString
2335    The queue priority is invalid. NERR_BadQueuePriority
2337    There are no shared communication devices. NERR_NoCommDevs
2338    The queue you specified does not exist. NERR_QueueNotFound

2340    This list of devices is invalid. NERR_BadDevString
2341    The requested device is invalid. NERR_BadDev
2342    This device is already in use by the spooler. NERR_InUseBySpooler
2343    This device is already in use as a communication device. NERR_CommDevInUse

2351    This computer name is invalid. NERR_InvalidComputer
2354    The string and prefix specified are too long. NERR_MaxLenExceeded
2356    This path component is invalid. NERR_BadComponent
2357    Could not determine the type of input. NERR_CantType

2362    The buffer for types is not big enough. NERR_TooManyEntries

2370    Profile files cannot exceed 64K. NERR_ProfileFileTooBig
2371    The start offset is out of range. NERR_ProfileOffset
2372    The system cannot delete current connections to network resources. NERR_ProfileCleanup
2373    The system was unable to parse the command line in this file.NERR_ProfileUnknownCmd
2374    An error occurred while loading the profile file. NERR_ProfileLoadErr
2375    @W Errors occurred while saving the profile file. The profile was partially saved. NERR_ProfileSaveErr
2377    Log file %1 is full. NERR_LogOverflow
2378    This log file has changed between reads. NERR_LogFileChanged
2379    Log file %1 is corrupt. NERR_LogFileCorrupt

2380    The source path cannot be a directory. NERR_SourceIsDir
2381    The source path is illegal. NERR_BadSource
2382    The destination path is illegal. NERR_BadDest
2383    The source and destination paths are on different servers. NERR_DifferentServers
2385    The Run server you requested is paused. NERR_RunSrvPaused
2389    An error occurred when communicating with a Run server. NERR_ErrCommRunSrv

2391    An error occurred when starting a background process. NERR_ErrorExecingGhost
2392    The shared resource you are connected to could not be found.NERR_ShareNotFound

2400    The LAN adapter number is invalid. NERR_InvalidLana
2401    There are open files on the connection. NERR_OpenFiles
2402    Active connections still exist. NERR_ActiveConns
2403    This share name or password is invalid. NERR_BadPasswordCore
2404    The device is being accessed by an active process. NERR_DevInUse
2405    The drive letter is in use locally. NERR_LocalDrive

2430    The specified client is already registered for the specified event. NERR_AlertExists
2431    The alert table is full. NERR_TooManyAlerts
2432    An invalid or nonexistent alert name was raised. NERR_NoSuchAlert
2433    The alert recipient is invalid.NERR_BadRecipient
2434    A user's session with this server has been deletedNERR_AcctLimitExceeded

2440    The log file does not contain the requested record number. NERR_InvalidLogSeek

2450    The user accounts database is not configured correctly. NERR_BadUasConfig
2451    This operation is not permitted when the Netlogon service is running. NERR_InvalidUASOp
2452    This operation is not allowed on the last administrative account. NERR_LastAdmin
2453    Could not find domain controller for this domain. NERR_DCNotFound
2454    Could not set logon information for this user. NERR_LogonTrackingError
2455    The Netlogon service has not been started. NERR_NetlogonNotStarted
2456    Unable to add to the user accounts database. NERR_CanNotGrowUASFile
2457    This server's clock is not synchronized with the primary domain controller's clock. NERR_TimeDiffAtDC
2458    A password mismatch has been detected. NERR_PasswordMismatch

2460    The server identification does not specify a valid server. NERR_NoSuchServer
2461    The session identification does not specify a valid session. NERR_NoSuchSession
2462    The connection identification does not specify a valid connection. NERR_NoSuchConnection
2463    There is no space for another entry in the table of available servers. NERR_TooManyServers
2464    The server has reached the maximum number of sessions it supports. NERR_TooManySessions
2465    The server has reached the maximum number of connections it supports. NERR_TooManyConnections
2466    The server cannot open more files because it has reached its maximum number. NERR_TooManyFiles
2467    There are no alternate servers registered on this server. NERR_NoAlternateServers

2470    Try down-level (remote admin protocol) version of API instead. NERR_TryDownLevel

2480    The UPS driver could not be accessed by the UPS service. NERR_UPSDriverNotStarted
2481    The UPS service is not configured correctly. NERR_UPSInvalidConfig
2482    The UPS service could not access the specified Comm Port. NERR_UPSInvalidCommPort
2483    The UPS indicated a line fail or low battery situation. Service not started. NERR_UPSSignalAsserted
2484    The UPS service failed to perform a system shut down. NERR_UPSShutdownFailed

2500    The program below returned an MS-DOS error code:NERR_BadDosRetCode
2501    The program below needs more memory:NERR_ProgNeedsExtraMem
2502    The program below called an unsupported MS-DOS function:NERR_BadDosFunction
2503    The workstation failed to boot.NERR_RemoteBootFailed
2504    The file below is corrupt.NERR_BadFileCheckSum
2505    No loader is specified in the boot-block definition file.NERR_NoRplBootSystem
2506    NetBIOS returned an error: The NCB and SMB are dumped above.NERR_RplLoadrNetBiosErr
2507    A disk I/O error occurred.NERR_RplLoadrDiskErr
2508    Image parameter substitution failed.NERR_ImageParamErr
2509    Too many image parameters cross disk sector boundaries.NERR_TooManyImageParams

2510    The image was not generated from an MS-DOS diskette formatted with /S.NERR_NonDosFloppyUsed
2511    Remote boot will be restarted later.NERR_RplBootRestart
2512    The call to the Remoteboot server failed.NERR_RplSrvrCallFailed
2513    Cannot connect to the Remoteboot server.NERR_CantConnectRplSrvr
2514    Cannot open image file on the Remoteboot server.NERR_CantOpenImageFile
2515    Connecting to the Remoteboot server...NERR_CallingRplSrvr
2516    Connecting to the Remoteboot server...NERR_StartingRplBoot
2517    Remote boot service was stopped; check the error log for the cause of the problem.NERR_RplBootServiceTerm
2518    Remote boot startup failed; check the error log for the cause of the problem.NERR_RplBootStartFailed
2519    A second connection to a Remoteboot resource is not allowed.NERR_RPL_CONNECTED

2550    The browser service was configured with MaintainServerList=No. NERR_BrowserConfiguredToNotRun

2610    Service failed to start since none of the network adapters started with this service.NERR_RplNoAdaptersStarted
2611    Service failed to start due to bad startup information in the registry.NERR_RplBadRegistry
2612    Service failed to start because its database is absent or corrupt.NERR_RplBadDatabase
2613    Service failed to start because RPLFILES share is absent.NERR_RplRplfilesShare
2614    Service failed to start because RPLUSER group is absent.NERR_RplNotRplServer
2615    Cannot enumerate service records.NERR_RplCannotEnum
2616    Workstation record information has been corrupted.NERR_RplWkstaInfoCorrupted
2617    Workstation record was not found.NERR_RplWkstaNotFound
2618    Workstation name is in use by some other workstation.NERR_RplWkstaNameUnavailable
2619    Profile record information has been corrupted.NERR_RplProfileInfoCorrupted

2620    Profile record was not found.NERR_RplProfileNotFound
2621    Profile name is in use by some other profile.NERR_RplProfileNameUnavailable
2622    There are workstations using this profile.NERR_RplProfileNotEmpty
2623    Configuration record information has been corrupted.NERR_RplConfigInfoCorrupted
2624    Configuration record was not found.NERR_RplConfigNotFound
2625    Adapter id record information has been corrupted.NERR_RplAdapterInfoCorrupted
2626    An internal service error has occurred.NERR_RplInternal
2627    Vendor id record information has been corrupted.NERR_RplVendorInfoCorrupted
2628    Boot block record information has been corrupted.NERR_RplBootInfoCorrupted
2629    The user account for this workstation record is missing.NERR_RplWkstaNeedsUserAcct

2630    The RPLUSER local group could not be found.NERR_RplNeedsRPLUSERAcct
2631    Boot block record was not found.NERR_RplBootNotFound
2632    Chosen profile is incompatible with this workstation.NERR_RplIncompatibleProfile
2633    Chosen network adapter id is in use by some other workstation.NERR_RplAdapterNameUnavailable
2634    There are profiles using this configuration.NERR_RplConfigNotEmpty
2635    There are workstations, profiles, or configurations using this boot block.NERR_RplBootInUse
2636    Service failed to backup Remoteboot database.NERR_RplBackupDatabase
2637    Adapter record was not found.NERR_RplAdapterNotFound
2638    Vendor record was not found.NERR_RplVendorNotFound
2639    Vendor name is in use by some other vendor record.NERR_RplVendorNameUnavailable

2640    (boot name, vendor id) is in use by some other boot block record.NERR_RplBootNameUnavailable
2641    Configuration name is in use by some other configuration.NERR_RplConfigNameUnavailable

2660    The internal database maintained by the Dfs service is corruptNERR_DfsInternalCorruption
2661    One of the records in the internal Dfs database is corruptNERR_DfsVolumeDataCorrupt
2662    There is no volume whose entry path matches the input Entry PathNERR_DfsNoSuchVolume
2663    A volume with the given name already existsNERR_DfsVolumeAlreadyExists
2664    The server share specified is already shared in the DfsNERR_DfsAlreadyShared
2665    The indicated server share does not support the indicated Dfs volumeNERR_DfsNoSuchShare
2666    The operation is not valid on a non-leaf volumeNERR_DfsNotALeafVolume
2667    The operation is not valid on a leaf volumeNERR_DfsLeafVolume
2668    The operation is ambiguous because the volume has multiple serversNERR_DfsVolumeHasMultipleServers
2669    Unable to create a junction pointNERR_DfsCantCreateJunctionPoint

2670    The server is not Dfs AwareNERR_DfsServerNotDfsAware
2671    The specified rename target path is invalidNERR_DfsBadRenamePath
2672    The specified Dfs volume is offlineNERR_DfsVolumeIsOffline
2673    The specified server is not a server for this volumeNERR_DfsNoSuchServer
2674    A cycle in the Dfs name was detectedNERR_DfsCyclicalName
2675    The operation is not supported on a server-based DfsNERR_DfsNotSupportedInServerDfs

2690    Dfs internal errorNERR_DfsInternalError
2691    This machine is already joined to a domain.NERR_SetupAlreadyJoined
2692    This machine is not currently joined to a domain. NERR_SetupNotJoined
2693    This machine is a domain controller and cannot be unjoined from a domain. NERR_SetupDomainController

Source: C:\AA\Src20020607\EnHlp\html\erro9nw0.htm - (113)


Error-Codes (SSL)

SSL - Errors

Translated by Obbe-Jan Bakker

SSL Errors have the following syntax:

error:[error code]:[library name]:[function name]:[reason string]

error code:       an 8-bit hexadecimal code,
library name      the SSL-library
function name     the function within the library
reason string     error-description

SSL_R_APP_DATA_IN_HANDSHAKE                                 100    app data in handshake
SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT         272    attempt to reuse session in different context
SSL_R_BAD_ALERT_RECORD                                      101    bad alert record
SSL_R_BAD_AUTHENTICATION_TYPE                               102    bad authentication type
SSL_R_BAD_CHANGE_CIPHER_SPEC                                103    bad change cipher spec
SSL_R_BAD_CHECKSUM                                          104    bad checksum
SSL_R_BAD_DATA_RETURNED_BY_CALLBACK                         106    bad data returned by callback
SSL_R_BAD_DECOMPRESSION                                     107    bad decompression
SSL_R_BAD_DH_G_LENGTH                                       108    bad dh g length
SSL_R_BAD_DH_PUB_KEY_LENGTH                                 109    bad dh pub key length
SSL_R_BAD_DH_P_LENGTH                                       110    bad dh p length
SSL_R_BAD_DIGEST_LENGTH                                     111    bad digest length
SSL_R_BAD_DSA_SIGNATURE                                     112    bad dsa signature
SSL_R_BAD_HELLO_REQUEST                                     105    bad hello request
SSL_R_BAD_LENGTH                                            271    bad length
SSL_R_BAD_MAC_DECODE                                        113    bad mac decode
SSL_R_BAD_MESSAGE_TYPE                                      114    bad message type
SSL_R_BAD_PACKET_LENGTH                                     115    bad packet length
SSL_R_BAD_PROTOCOL_VERSION_NUMBER                           116    bad protocol version number
SSL_R_BAD_RESPONSE_ARGUMENT                                 117    bad response argument
SSL_R_BAD_RSA_DECRYPT                                       118    bad rsa decrypt
SSL_R_BAD_RSA_ENCRYPT                                       119    bad rsa encrypt
SSL_R_BAD_RSA_E_LENGTH                                      120    bad rsa e length
SSL_R_BAD_RSA_MODULUS_LENGTH                                121    bad rsa modulus length
SSL_R_BAD_RSA_SIGNATURE                                     122    bad rsa signature
SSL_R_BAD_SIGNATURE                                         123    bad signature
SSL_R_BAD_SSL_FILETYPE                                      124    bad ssl filetype
SSL_R_BAD_SSL_SESSION_ID_LENGTH                             125    bad ssl session id length
SSL_R_BAD_STATE                                             126    bad state
SSL_R_BAD_WRITE_RETRY                                       127    bad write retry
SSL_R_BIO_NOT_SET                                           128    bio not set
SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                             129    block cipher pad is wrong
SSL_R_BN_LIB                                                130    bn lib
SSL_R_CA_DN_LENGTH_MISMATCH                                 131    ca dn length mismatch
SSL_R_CA_DN_TOO_LONG                                        132    ca dn too long
SSL_R_CCS_RECEIVED_EARLY                                    133    ccs received early
SSL_R_CERTIFICATE_VERIFY_FAILED                             134    certificate verify failed
SSL_R_CERT_LENGTH_MISMATCH                                  135    cert length mismatch
SSL_R_CHALLENGE_IS_DIFFERENT                                136    challenge is different
SSL_R_CIPHER_CODE_WRONG_LENGTH                              137    cipher code wrong length
SSL_R_CIPHER_OR_HASH_UNAVAILABLE                            138    cipher or hash unavailable
SSL_R_CIPHER_TABLE_SRC_ERROR                                139    cipher table src error
SSL_R_COMPRESSED_LENGTH_TOO_LONG                            140    compressed length too long
SSL_R_COMPRESSION_FAILURE                                   141    compression failure
SSL_R_COMPRESSION_LIBRARY_ERROR                             142    compression library error
SSL_R_CONNECTION_ID_IS_DIFFERENT                            143    connection id is different
SSL_R_CONNECTION_TYPE_NOT_SET                               144    connection type not set
SSL_R_DATA_BETWEEN_CCS_AND_FINISHED                         145    data between ccs and finished
SSL_R_DATA_LENGTH_TOO_LONG                                  146    data length too long
SSL_R_DECRYPTION_FAILED                                     147    decryption failed
SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC                  1109    decryption failed or bad record mac
SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG                       148    dh public value length is wrong
SSL_R_DIGEST_CHECK_FAILED                                   149    digest check failed
SSL_R_ENCRYPTED_LENGTH_TOO_LONG                             150    encrypted length too long
SSL_R_ERROR_GENERATING_TMP_RSA_KEY                         1092    error generating tmp rsa key
SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST                         151    error in received cipher list
SSL_R_EXCESSIVE_MESSAGE_SIZE                                152    excessive message size
SSL_R_EXTRA_DATA_IN_MESSAGE                                 153    extra data in message
SSL_R_GOT_A_FIN_BEFORE_A_CCS                                154    got a fin before a ccs
SSL_R_HTTPS_PROXY_REQUEST                                   155    https proxy request
SSL_R_HTTP_REQUEST                                          156    http request
SSL_R_ILLEGAL_PADDING                                      1110    illegal padding
SSL_R_INTERNAL_ERROR                                        157    internal error
SSL_R_INVALID_CHALLENGE_LENGTH                              158    invalid challenge length
SSL_R_INVALID_COMMAND                                       280    invalid command
SSL_R_INVALID_PURPOSE                                       278    invalid purpose
SSL_R_INVALID_TRUST                                         279    invalid trust
SSL_R_LENGTH_MISMATCH                                       159    length mismatch
SSL_R_LENGTH_TOO_SHORT                                      160    length too short
SSL_R_LIBRARY_BUG                                           274    library bug
SSL_R_LIBRARY_HAS_NO_CIPHERS                                161    library has no ciphers
SSL_R_MESSAGE_TOO_LONG                                     1111    message too long
SSL_R_MISSING_DH_DSA_CERT                                   162    missing dh dsa cert
SSL_R_MISSING_DH_KEY                                        163    missing dh key
SSL_R_MISSING_DH_RSA_CERT                                   164    missing dh rsa cert
SSL_R_MISSING_DSA_SIGNING_CERT                              165    missing dsa signing cert
SSL_R_MISSING_EXPORT_TMP_DH_KEY                             166    missing export tmp dh key
SSL_R_MISSING_EXPORT_TMP_RSA_KEY                            167    missing export tmp rsa key
SSL_R_MISSING_RSA_CERTIFICATE                               168    missing rsa certificate
SSL_R_MISSING_RSA_ENCRYPTING_CERT                           169    missing rsa encrypting cert
SSL_R_MISSING_RSA_SIGNING_CERT                              170    missing rsa signing cert
SSL_R_MISSING_TMP_DH_KEY                                    171    missing tmp dh key
SSL_R_MISSING_TMP_RSA_KEY                                   172    missing tmp rsa key
SSL_R_MISSING_TMP_RSA_PKEY                                  173    missing tmp rsa pkey
SSL_R_MISSING_VERIFY_MESSAGE                                174    missing verify message
SSL_R_NON_SSLV2_INITIAL_PACKET                              175    non sslv2 initial packet
SSL_R_NO_CERTIFICATES_RETURNED                              176    no certificates returned
SSL_R_NO_CERTIFICATE_ASSIGNED                               177    no certificate assigned
SSL_R_NO_CERTIFICATE_RETURNED                               178    no certificate returned
SSL_R_NO_CERTIFICATE_SET                                    179    no certificate set
SSL_R_NO_CERTIFICATE_SPECIFIED                              180    no certificate specified
SSL_R_NO_CIPHERS_AVAILABLE                                  181    no ciphers available
SSL_R_NO_CIPHERS_PASSED                                     182    no ciphers passed
SSL_R_NO_CIPHERS_SPECIFIED                                  183    no ciphers specified
SSL_R_NO_CIPHER_LIST                                        184    no cipher list
SSL_R_NO_CIPHER_MATCH                                       185    no cipher match
SSL_R_NO_CLIENT_CERT_RECEIVED                               186    no client cert received
SSL_R_NO_COMPRESSION_SPECIFIED                              187    no compression specified
SSL_R_NO_METHOD_SPECIFIED                                   188    no method specified
SSL_R_NO_PRIVATEKEY                                         189    no privatekey
SSL_R_NO_PRIVATE_KEY_ASSIGNED                               190    no private key assigned
SSL_R_NO_PROTOCOLS_AVAILABLE                                191    no protocols available
SSL_R_NO_PUBLICKEY                                          192    no publickey
SSL_R_NO_SHARED_CIPHER                                      193    no shared cipher
SSL_R_NO_VERIFY_CALLBACK                                    194    no verify callback
SSL_R_NULL_SSL_CTX                                          195    null ssl ctx
SSL_R_NULL_SSL_METHOD_PASSED                                196    null ssl method passed
SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED                       197    old session cipher not returned
SSL_R_PACKET_LENGTH_TOO_LONG                                198    packet length too long
SSL_R_PATH_TOO_LONG                                         270    path too long
SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE                     199    peer did not return a certificate
SSL_R_PEER_ERROR                                            200    peer error
SSL_R_PEER_ERROR_CERTIFICATE                                201    peer error certificate
SSL_R_PEER_ERROR_NO_CERTIFICATE                             202    peer error no certificate
SSL_R_PEER_ERROR_NO_CIPHER                                  203    peer error no cipher
SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE               204    peer error unsupported certificate type
SSL_R_PRE_MAC_LENGTH_TOO_LONG                               205    pre mac length too long
SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS                     206    problems mapping cipher functions
SSL_R_PROTOCOL_IS_SHUTDOWN                                  207    protocol is shutdown
SSL_R_PUBLIC_KEY_ENCRYPT_ERROR                              208    public key encrypt error
SSL_R_PUBLIC_KEY_IS_NOT_RSA                                 209    public key is not rsa
SSL_R_PUBLIC_KEY_NOT_RSA                                    210    public key not rsa
SSL_R_READ_BIO_NOT_SET                                      211    read bio not set
SSL_R_READ_WRONG_PACKET_TYPE                                212    read wrong packet type
SSL_R_RECORD_LENGTH_MISMATCH                                213    record length mismatch
SSL_R_RECORD_TOO_LARGE                                      214    record too large
SSL_R_RECORD_TOO_SMALL                                     1093    record too small
SSL_R_REQUIRED_CIPHER_MISSING                               215    required cipher missing
SSL_R_REUSE_CERT_LENGTH_NOT_ZERO                            216    reuse cert length not zero
SSL_R_REUSE_CERT_TYPE_NOT_ZERO                              217    reuse cert type not zero
SSL_R_REUSE_CIPHER_LIST_NOT_ZERO                            218    reuse cipher list not zero
SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED                      277    session id context uninitialized
SSL_R_SHORT_READ                                            219    short read
SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE                 220    signature for non signing certificate
SSL_R_SSL23_DOING_SESSION_ID_REUSE                          221    ssl23 doing session id reuse
SSL_R_SSL3_SESSION_ID_TOO_SHORT                             222    ssl3 session id too short
SSL_R_SSLV3_ALERT_BAD_CERTIFICATE                          1042    sslv3 alert bad certificate
SSL_R_SSLV3_ALERT_BAD_RECORD_MAC                           1020    sslv3 alert bad record mac
SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED                      1045    sslv3 alert certificate expired
SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED                      1044    sslv3 alert certificate revoked
SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN                      1046    sslv3 alert certificate unknown
SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE                    1030    sslv3 alert decompression failure
SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE                        1040    sslv3 alert handshake failure
SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER                        1047    sslv3 alert illegal parameter
SSL_R_SSLV3_ALERT_NO_CERTIFICATE                           1041    sslv3 alert no certificate
SSL_R_SSLV3_ALERT_PEER_ERROR_CERTIFICATE                    223    sslv3 alert peer error certificate
SSL_R_SSLV3_ALERT_PEER_ERROR_NO_CERTIFICATE                 224    sslv3 alert peer error no certificate
SSL_R_SSLV3_ALERT_PEER_ERROR_NO_CIPHER                      225    sslv3 alert peer error no cipher
SSL_R_SSLV3_ALERT_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE   226    sslv3 alert peer error unsupported certificate type
SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE                       1010    sslv3 alert unexpected message
SSL_R_SSLV3_ALERT_UNKNOWN_REMOTE_ERROR_TYPE                 227    sslv3 alert unknown remote error type
SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE                  1043    sslv3 alert unsupported certificate
SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION                    228    ssl ctx has no default ssl version
SSL_R_SSL_HANDSHAKE_FAILURE                                 229    ssl handshake failure
SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS                            230    ssl library has no ciphers
SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG                       273    ssl session id context too long
SSL_R_SSL_SESSION_ID_IS_DIFFERENT                           231    ssl session id is different
SSL_R_TLSV1_ALERT_ACCESS_DENIED                            1049    tlsv1 alert access denied
SSL_R_TLSV1_ALERT_DECODE_ERROR                             1050    tlsv1 alert decode error
SSL_R_TLSV1_ALERT_DECRYPTION_FAILED                        1021    tlsv1 alert decryption failed
SSL_R_TLSV1_ALERT_DECRYPT_ERROR                            1051    tlsv1 alert decrypt error
SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION                       1060    tlsv1 alert export restriction
SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY                    1071    tlsv1 alert insufficient security
SSL_R_TLSV1_ALERT_INTERNAL_ERROR                           1080    tlsv1 alert internal error
SSL_R_TLSV1_ALERT_NO_RENEGOTIATION                         1100    tlsv1 alert no renegotiation
SSL_R_TLSV1_ALERT_PROTOCOL_VERSION                         1070    tlsv1 alert protocol version
SSL_R_TLSV1_ALERT_RECORD_OVERFLOW                          1022    tlsv1 alert record overflow
SSL_R_TLSV1_ALERT_UNKNOWN_CA                               1048    tlsv1 alert unknown ca
SSL_R_TLSV1_ALERT_USER_CANCELLED                           1090    tlsv1 alert user cancelled
SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER                  232    tls client cert req with anon cipher
SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST        233    tls peer did not respond with certificate list
SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG               234    tls rsa encrypted value length is wrong
SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER                       235    tried to use unsupported cipher
SSL_R_UNABLE_TO_DECODE_DH_CERTS                             236    unable to decode dh certs
SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY                          237    unable to extract public key
SSL_R_UNABLE_TO_FIND_DH_PARAMETERS                          238    unable to find dh parameters
SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS                  239    unable to find public key parameters
SSL_R_UNABLE_TO_FIND_SSL_METHOD                             240    unable to find ssl method
SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES                      241    unable to load ssl2 md5 routines
SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES                      242    unable to load ssl3 md5 routines
SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES                     243    unable to load ssl3 sha1 routines
SSL_R_UNEXPECTED_MESSAGE                                    244    unexpected message
SSL_R_UNEXPECTED_RECORD                                     245    unexpected record
SSL_R_UNINITIALIZED                                         276    uninitialized
SSL_R_UNKNOWN_ALERT_TYPE                                    246    unknown alert type
SSL_R_UNKNOWN_CERTIFICATE_TYPE                              247    unknown certificate type
SSL_R_UNKNOWN_CIPHER_RETURNED                               248    unknown cipher returned
SSL_R_UNKNOWN_CIPHER_TYPE                                   249    unknown cipher type
SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE                             250    unknown key exchange type
SSL_R_UNKNOWN_PKEY_TYPE                                     251    unknown pkey type
SSL_R_UNKNOWN_PROTOCOL                                      252    unknown protocol
SSL_R_UNKNOWN_REMOTE_ERROR_TYPE                             253    unknown remote error type
SSL_R_UNKNOWN_SSL_VERSION                                   254    unknown ssl version
SSL_R_UNKNOWN_STATE                                         255    unknown state
SSL_R_UNSUPPORTED_CIPHER                                    256    unsupported cipher
SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM                     257    unsupported compression algorithm
SSL_R_UNSUPPORTED_OPTION                                   1091    unsupported option
SSL_R_UNSUPPORTED_PROTOCOL                                  258    unsupported protocol
SSL_R_UNSUPPORTED_SSL_VERSION                               259    unsupported ssl version
SSL_R_WRITE_BIO_NOT_SET                                     260    write bio not set
SSL_R_WRONG_CIPHER_RETURNED                                 261    wrong cipher returned
SSL_R_WRONG_MESSAGE_TYPE                                    262    wrong message type
SSL_R_WRONG_NUMBER_OF_KEY_BITS                              263    wrong number of key bits
SSL_R_WRONG_SIGNATURE_LENGTH                                264    wrong signature length
SSL_R_WRONG_SIGNATURE_SIZE                                  265    wrong signature size
SSL_R_WRONG_SSL_VERSION                                     266    wrong ssl version
SSL_R_WRONG_VERSION_NUMBER                                  267    wrong version number
SSL_R_X509_LIB                                              268    x509 lib
SSL_R_X509_VERIFICATION_SETUP_PROBLEMS                      269    x509 verification setup problems

Source: C:\AA\Src20020607\EnHlp\html\erro9r1s.htm - (114)


Regular Expressions

Regular expressions in Hamster

Translated by Obbe-Jan Bakker

Adapted from original German explanation by Karl Pflästerer

Definition of regular expressions

What is a regular expression (regexp)? A regular expression is a method to describe text (strings), with a meta-syntax. This allows to subdivide strings in classes and describe these classes. So one can classify different Strings, all having some common element, based on that specific element.

The source-string is searched from left to right and the first string matching the regexp is returned as result. As default the longest matching string will be returned. This behavior is known as "greed" (a regexp is default "greedy"), this can be disabled if necessary. Default is also the case-handling of regexp. Default is case less, no difference between caps and non-caps.

Regular expressions in the hamster scorefiles (mailfilt.hst and scores.hst) must always be enclosed in curly braces: start with “{” and end with “}”. Everything between the curly braces is interpreted as part of the regular expression. The curly braces are not part of the regexp itself. In descriptions for regexp in Perl a similar convention is used: often “/.../”. This uses a different delimiter, the forward slash serves as delimiter. In scripts there is no need to use a special delimiter. The special functions for handling regular expressions expect their parameters to be defined as string, enclosed in quotation marks.

Listing of the syntax for regular expressions

Hamster uses for the regular expressions the regexp-Functions of the pcre-Library by Philip Hazel. PCRE is short for "perl compatible regular expressions", that is the syntax of the regexp very similar to the syntax used in the programming language Perl. Parts of this regexp description are based on the perl-documentation (also available as text and html). For a more detailed description the perl-documentation itself is recommended.

Default the compare process is case-insensitive. Most characters do not have a special meta-character meaning, that is these characters represent only themselves.

Next follows a description of these elements with a meta-character description, which can be used in regexp in Hamster. This listing is mostly a summary, with little explanation. More information for these is given in the description of the elements following further below.

And now first some notes for used keywords with a short explanation.

Englisch expression	short explanation
Case less/Case insensitive	Capitals and small letters are treated as equal
Casesensitiv	Capitals and small letters are treated as different
Carriage return	type-writer term, (Interpretation: see newline)
Escape character	„escape character“; enforces the interpretation as literal of the next character, 'escape' from interpretation as special character, that is character with a special meaning in regexps.
Flag	„flag“; marks a switch, can be set to high or low (see below).
Greedy	Greedy, determines the behavior/effect of quantifiers (see below).
To match	means the part of the source-string, that matches the search-string.
Newline	End-of-line-character; can be carriage return or carriage return + linefeed, depending on the operating system.
Pattern	Searchpattern (marks the entire matchstring)
Quantifier	The operator, which determines if and/or how often the previous expression may be repeated.
String	character string.
Subpattern	Logical subsegment of the pattern

Syntax-Elements which can be used outside the „[]“ brackets.

Character	Short description
\	General escape-character
^	Represents the begin of a string or a line
$	Represents the end of a string or a line
.	Represents every character except newline
[	Starts the definition of a character class
]	Ends the definition of a character class
|	Represents a logical OR, this separates alternatives in the expression
(	Starts a subpattern
)	Ends a subpattern
?	After “(” as switch to indicate options. Determines 0 or 1 occurrences (repeats) of the previous element, disables greediness
*	Determines 0 or more occurrences (repeats) of the previous element
+	Determines 1 or more occurrences (repeats) of the previous element
{	Starts count-limiting (Minimum, Maximum) of the previous element
}	Ends count-limiting (Minimum, Maximum) of the previous element

Syntax-Elements which can be used inside of the “[]” brackets

Character	Short description
\	General escape-character
^	As first character this indicates the negation of the described character class. So for example [^a-z0-9] represents all non-alphanumeric characters
-	Represents a range (until)

before explaining the individual meta-characters in more detail, now first some short examples. As teststring the following string will be used:

“Regexp$ used wrong can act like shooting your own foot.”. All regexps must be read (interpreted) as a single line.

Regexp	Match	Explanation
Reg	Reg	Trivial case; string without meta-characters
[reg]	R	Case less; if no quantifier is given, the expression behaves as the non-greedy variant (see below)
[reg]+	Rege	Case less; “+” is greedy and search is for the longest possible string containing the three characters in any order and at least once.
[reg]+?	R	Non-greedy Variant of the previous
[(reg)+]	R	„+“ only counts as quantifier outside the brackets „[]“.
[^reg]	X	The first match not containing „r“, „e“ oder „g“.
[a-z]+	Regexp	$ is not a character between a and z.
(?-i)[a-z]+	egexp	Case-sensitive; The scope of this option is so far as the subpattern reaches in which the flag is set.
((?-i)[a-z]+)\$.[A-Z]+	egexp$ used	The scope of the flag is only the subpattern; the $ must be escaped, because this is a meta-character; „.“ (the period) represents just one single character, a space in this example; Case less match at the end.
[0-9]*		This is a tricky one. There is no match-string but Hamster returns true (found). This is because the „*“ also represents zero occurrences. So an empty string is also a valid match. Don't forget this when using the „*“ quantifier.

The meaning of single meta-characters

The Backslash

The use of the backslash as escape-character has been described before. A backslash prefix ensures the literal interpretation of the prefixed character. This is only necessary for the characters with a special meaning in regexps, like the $-character. If you need to use the backslash as literal it must also be prefixed with a backslash.

But the backslash is also useful to make regexps shorter and/or more readable. As described before character classes can be described using […]. Because these are used very often, some classes are also made available by shortcuts. Also with the use of the backslash some characters can be searched which are not directly available on the keyboard.

Character	Short description
\a	Represents the Ascii-character 7 (Bell)
\cx	Represents Control-x; the x can be any character. Hereby the Control-@ stands for the character with the ASCII-value 0, Control-a for the character with the ASCII-value 1 ..., Control-i for example for the character with the ASCCI-value 9 == Tabulator. These are just some examples for the use of \cx. For a full description see the perl documentation.
\e	Escape; Ascii-value 27
\f	Formfeed; Ascii-value 12
\n	Linefeed; Ascii-value 10
\r	Carriage return; Ascii-value 13
\t	Tabulator; Ascii-value 9
\xhh	Hereby hh is the value of a character in hexadecimal notation (number system base 16). So \x09 is also the tab character and \x41 is the character „A“. The hex-number is based on the position of the character in the Ascii-table. For the characters with a position > 127 the characters from the Ansi-table are used.
\ddd	Hereby ddd is the value in octal notation (number system base 8). The tab character is \011 and the character A is \101 in this notation.
\d	Corresponds to character class [0-9]
\D	Is the complement for \d, so this corresponds to character class [^0-9]
\s	Corresponds to every whitespace character (Space, Tab)
\S	Is the complement to \s
\w	Every character that can be used as word-character. This corresponds to character class [0-9a-zA-Z_] (alphanumeric character and underscore). This excludes special characters like Umlaute wie ä, ü and the ß. This is especially important when using regexps for non-english texts.
\W	The complement to \w
\b	Outside a character class: Represents a word boundary, that is the boundary between a \w-character on one side and a \W-character on the other side. Inside a character class this represents a backslash.
\B	The complement to \b
\A	The begin of a string
\Z	The end of a string or newline
\z	The end of a string

The characters in the last third of this table can with the exception of \b, not be used in character classes. These are so called "assertions". These do not refer to a single character, but make a prediction about the context of two characters. For example the expression \w+\b\w+\b\w+ does not match the sentence „Hamster is good“. The first \w+ matches with Hamster, then a character in the class \W is expected. This is valid, the space. Then another character in the class \w is expected. But this does not find the space, because the \b does not „capture“ the space. Change the searchstring to \w+\s\w+\s\w+ ,this will also capture the space.

\A,\Z,\z are here not further explained, because the differences with ^ and $ are not important for the use of regexps in Hamster.

^ and $

Both are assertions. Hereby represents ^ outside of character classes the begin of a string and $ represents the end (also outside of character classes). When used inside a character class the ^ represents when used as first character in the class, the complement of the entire character class, as non-first it has no special meaning. The $ has no special meaning inside a character class.

Brackets

A left bracket „[“ marks the begin of a character class. All following characters form a range of characters contained in the character class until a right bracket „]“ ends the character class. A single right bracket has no special meaning. A single left bracket must be escaped with a backslash so it will not be interpreted as the beginning of a character class. The right bracket can be used inside a character class as the first character. In this case there is no need to escape this character. For example []a-z]+ matches with all alphabetic characters and the right bracket.

Inside a character class the hyphen „-“ indicates a range of characters. The range is always including the boundaries, so [a-z] is a range including the characters a and z. In order to find the hyphen itself, place the hyphen as first or last character in the class or escape it with a backslash. Character classes can also be used with characters defined as octal values ( \ddd with d from 0 till 7) or as hexadecimal values ( \xhh, with h from 0 till F).

The meta-characters \d, \D, \s, \S, \w, \W can be used in character classes, \b represents the backslash when used inside a character class [].

The pipe-character |

As defined before, the character „|“ represents a logical OR (this is an inclusive or, similar to the natural speech construct and/or. So a sentence like: „This evening I will cook or finish reading a book“ can result in true in three ways, if I only read, if I only cook and if I read and cook. This character makes it possible to combine several alternatives for matching into a single searchexpression. By using round braces (), you can create subpatterns, which can be combined with the pipe-character.

Flags

In one of the examples above a flag has been used briefly. Next follows a list of possible flags and their description.

A flag is always preceded with „(?“ followed by the flag itself and closed with a closing brace. The scope of a flag is determined by the (sub)pattern in which the flag is defined/contained. A minus-sign before the flag reverses the meaning to the opposite. For practical use in Hamster only the „i“-flag and maybe the „x“-flag are important.

flag	description
i	Caseless (case-insensitive)
x	pcre extented; all blanks in a searchstring are ignored; can be very useful to improve readability
m	Multiline-Strings are possible
s	pcre –dotall; Period matches also with newline

Quantifier

A quantifier is an expression which determines how often the preceding expression might/must be repeated. In the previous parts the quantifiers „*“, „+“ and „?“ have been described. These are all shortcuts for the more general form of a quantifier: Quantifiers: {n, m}. This determines that the expression must occur at least n times and at most m times. The quantifier {n,} evaluates to minimal n and no maximum to the number of occurrences. The quantifier {n} marks the specific number of n occurrences. The three previous described shortcuts are in the general notation described as:

* {0,}
+ {1,}
? (0,1}

Where can quantifiers be used? After every single character (both escaped and non-escaped), after the period „.“ (this represents almost every character), after a character class, or after a subpattern (a part of the searchexpression enclosed in round braces). Furthermore these are allowed after the so-called backreferences. (These are not described in this manual, please see the perl documentation for a more detailed description).

Default quantifiers are greedy. They try to match the longest possible string. If this is not the desired behavior, this can be turned off. If the quantifier is directly followed by the question mark „?“ the quantifier will not be greedy and the search will return the smallest possible matchstring.

Be careful with the use of these quantifiers, because this greatly increases the number of possible combinations that must be tested for a match. For example the expression (a+)* can be matched to the string „aaaa“ in 33 different ways. If used on a longer string in some circumstances it may take a very long time to examine all alternatives if there is no match found. If you need to use such constructs please see the perl manual for further info on how to optimize the searchstring.

Source: C:\AA\Src20020607\EnHlp\html\file3vao-RE.htm - (115)


Acknowledgements

Acknowledgements

Translated by Obbe-Jan Bakker

The "regular expression"-routines used in Hamster use a Win32-port of "Perl-Compatible Regular Expression (PCRE)" written by Philip Hazel (< ph10@cam.ac.uk >), Copyright (c) 1997-2000 by University of Cambridge (see http://www.pcre.org for more details).

Although the wrapper-class used for PCRE uses a slightly different approach, parts of it are at least inspired by the concepts used in "uperlre". "uperlre" is a wrapper-class for PCRE written by Luu Tran (<xnews@newsguy.com>), author of "XNews"-newsreader (see http://xnews.newsguy.com/ for more details).

Thanks also to Christian Fritz and Michael Gebert for their German translations.

Thanks also to all who have contributed to the project to update the English help for Hamster:

ANT-ilic, Obbe-Jan Bakker, Paul Batchie, Shehu Dikko, Elfin, Lawrence Mitchell, Heiko Studt.

Thanks! :-)

Source: C:\AA\Src20020607\EnHlp\html\hams02nk.htm - (116)


License and copyrights

License and copyrights

Translated by Obbe-Jan Bakker

============================================================================
Hamster, a free news- and mailserver for personal, family and workgroup use.
Copyright (c) 1999, Juergen Haible (<juergen.haible@t-online.de>).

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
============================================================================

German helpfile maintained by Jörn weber (joern_weber@gmx.de)

See also menu " Help / About... " For further information. (Current Maintainer, author, download links etc).

Patents

Attention! Some additional tools for Hamster, especially the OpenSSL DLL’ s, contain software technologies, which could be protected by patents. So please inform yourself over these before using the files libeay32.dll and libssl32.dll.

Source: C:\AA\Src20020607\EnHlp\html\hams02uo.htm - (117)


English Hamster Help Work in progress

Contents English HtmlHelp for Hamster Classic version 2.0.0.0 (last update German help-sources : 2002-12-22)

All pages sorted by filename.

· Installation .....Translated.

· Introduction

· Overview

· Installation

· Remote control

· FAQ .....Translated. .....except "SSL-FAQ", "Hamster and secure passwords", "Hamster and authentication".

· Links to Hamster-related sites and infos

· Release Notes

· Menus

· Files .....Translated.

· Rebuild global lists

· Purge all groups

· Rebuild news history

· Clear counters & log

· Refresh menu items

· Exit

· Configuration

· General settings ... .....Translated.

· Visual

· Logfiles

· Online-Menu

· Internal groups

· SSL

· Misc.

· Accounts and passwords ... .....Translated.

· Local accounts

· Aliases for accounts

· Passwords

· Local server ... .....Translated.

· General (local domains)

·

· Edit IP-access

· News NNTP

· Mail POP3

· Mail IMAP

· Mail SMTP

· Remote control (Telnet)

· Automation... .....Translated.

· General

· Actions

· Load Articles by MID

· News: server, groups, pulls ... .....Translated.

· Settings

· News server

· News groups

· News-Pulls

· Killfile-Log/-Settings .....Translated.

· Mail: setting & server ... .....Translated.

· POP3-Settings

·

· Edit Mail-Score-/Killfile

· POP3-Mailserver

· SMTP-Settings

· SMTP-Mailserver

· Disable/Enable Advanced Configuration .....Translated.

· Edit special files .....Translated.

· Edit News-score-/Killfile

· Edit Mail-Score-/Killfile

· Edit Hamster.ini...

· Edit Hosts (resolve domains to IPs)...

· Reload configuration .....Translated.

· Online .....Translated.

· 1-9:user-defined menu's

· All servers (News+Mail)

· Single NNTP-/POP3-/SMTP- server

· RAS-dialing (open connection)

· RAS-hangup (close connection)

· Stop all tasks

· Script .....Translated.

· ( available scripts )

· Demo ( available demo scripts )

· Manage scripts and modules

· Stop all scripts

· Local servers .....Translated.

· Start / stop News-server (NNTP)

· Start / stop Mail-server (POP3)

· Start / stop Mail-server (IMAP)

· Start / stop Mail-server (SMTP)

· Start / stop remote control Telnet-server (RECO)

· Open Dir(s) for News/Mails ...

· Help .....Translated.

· Contents

· FAQ

· All helpfiles

· System-Information

· History...

· About...

· Context menus of the log windows .....Translated.

· Protocol for Newsjobs order

· Show single thread

· Copy single line to clipboard

· Copy all lines to clipboard

· Clear log(s)

· Scripts and programming .....Translated.

· Hamster-Scripts .....Translated. .....except "Concurrent Scripts".

· Statements and comments

· Pre-processor statements

· Jumps

· Variables, constants and data types

· Conditionals, Branches

· Expressions and operators

· Loops

· Boolean expressions

· Procedures and functions

· Built-in statements

· Modules

· Built-in functions (general)

· Concurrent Scripts !GERMAN!

· Built-in functions (servers)

· Call of scripts by command line

· Call of scripts by action

· Hamster-Event-Objects

· Hamster-Mutex-Objects

· Automation (OLE) Interface to other programs

· Files and folders

· Directory structure .....Translated.

· Files in the Logs folder .....Translated.

· Files in Hamster's main folder .....Translated.

· Overview

· Hamster.ini .....Translated.

· [Directories]

· [Setup]

· [Main]

· [Actions]

· [OtherSections]

· IPAccess.hst

· Scores.hst

· MailFilt.hst

· MAlias.hst

· Files in the Server - folders .....Translated.

· Server - main folder

· Files in the folder for each separate server

· Server.ini

· Files in the Groups - folders .....Translated.

· Groups - main folder

· News.Out

· Files in the folder for each separate group

· Data.ini

· Files in the Mail - folder .....Translated.

· Mails - main folder

· Mail.Out

· Admin

· Files in the folders of the separate 'Users'

· Other .....Translated.

· Error codes and error messages

· Regular Expressions in Hamster

· Acknowledgements

· Licence and copyrights

Source: C:\AA\Src20020607\EnHlp\hamster_en.html - (118)


All pages sorted by filename.

All pages sorted by filename.

Return to index page.

defcolor.htm Defining colors      [Defining colors]

............ Translated by Obbe-Jan Bakker.
erro9b8w.htm Error codes and error messages      [Error codes and error messages]

............ Translated by Obbe-Jan Bakker.

This is an example for author-comment
erro9bhs.htm Frequent error-codes and messages      [Error-codes (frequent)]

............ Translated by Obbe-Jan Bakker.
erro9eeo.htm Windows Sockets (WinSock) Error Codes      [Error-codes (WinSock)]

............ Translated by Obbe-Jan Bakker.
erro9hkg.htm Remote Access service (RAS) Error codes      [Error-codes (RAS)]

............ Translated by Obbe-Jan Bakker.
erro9kq8.htm Win32 - System Error Codes      [Error-codes (Win32-System)]

............ Translated by Obbe-Jan Bakker.
erro9nw0.htm Win32 - Net Error Codes      [Error-codes (Win32-Net)]

............ Translated by Obbe-Jan Bakker.
erro9r1s.htm SSL - Errors      [Error-Codes (SSL)]

............ Translated by Obbe-Jan Bakker.
faq18kw.htm Menu: Help / FAQ, List of frequently asked questions      [FAQ]

............ Translated by Lawrence Mitchell.
faq18kx.htm Hamster and anti-virus Programs      [Antivirus programs]

............ Translated by Lawrence Mitchell.

type error in German: 'Abschintt' ->'Abschnitt'
faq18ky.htm Exceeding the user limit      [Exceeding the user limit]

............ Translated by Lawrence Mitchell.
faq18kz.htm Error message -- missing AUTH when sending e-mail      [Error message - missing AUTH when sending e-mail]

............ Translated by Lawrence Mitchell.
faq18l0.htm Start of the local xxxx-server failed      [Start of the local xxxx-server failed]

............ Translated by Lawrence Mitchell.
faq18l1.htm Hamster and Forte Agent      [Hamster and Forte Agent]

............ Translated by Lawrence Mitchell.
faq18l2.htm Hamster and "large" E-mail      [Hamster and "large" E-mails]

............ Translated by Lawrence Mitchell.
faq18l3.htm How can I see what happens in Hamster?      [How can I see what happens in Hamster?]

............ Translated by Lawrence Mitchell.
faq18l4.htm Where can I get help if I'm stuck?      [Where can I get help if I'm stuck?]

............ Translated by Lawrence Mitchell.
faq18mo.htm Hamster Event FAQ of Jan Schulz      [Hamster and Events]

............ Translated by ANT-ilic.
faq18mp.htm Hamster and Netscape      [Hamster and Netscape]

............ Translated by Lawrence Mitchell.
faq18mq.htm Why have my passwords suddenly stopped working?      [Password FAQ]

............ Translated by Lawrence Mitchell.
faq18mr.htm How can I load old articles in a newly subscribed newsgroup?      [Articles reload FAQ]

............ Translated by Lawrence Mitchell.
faq18ms.htm How do I setup Hamster to automatically send and retrieve mail and newsat regular intervals?      [Schedule FAQ]

............ Translated by Obbe-Jan Bakker.
faq18mt.htm Why can't the group internal.misc be deleted?      [Internal.misc FAQ]

............ Translated by ANT-ilic.
faq18mu.htm "Feeding" newsgroups with Hamster.      [Feeder FAQ]

............ Translated by ANT-ilic.
faq18mv.htm Can hamster do the mail distribution in a company network?      [Mail distributor and company network FAQ]

............ Translated by Heiko Studt.
faq18mw.htm Convert mailing-lists into newsgroups      [Convert mailing-lists into newsgroups FAQ]

............ Translated by ANT-ilic.
faq18mx.htm Can I use two hamsters?      [Two hamsters FAQ]

............ Translated by ANT-ilic.
faq18og.htm I can access LAN but not the Hamster?      [LAN hamster FAQ]

............ Translated by ANT-ilic.
faq18oh.htm How I can access several accounts (mailboxes) with the same provider (ISP)?      [Multiple mailbox FAQ]

............ Translated by ANT-ilic, updated by Obbe-Jan Bakker.
faq18oi.htm Hamster and FQDN      [FQDN FAQ]

............ Translated by ANT-ilic.
faq18oj.htm Hamster and security      [Security]

............ Translated by Lawrence Mitchell.
faq18ok.htm Conserving network resources      [Network resources]

............ Translated by Lawrence Mitchell.
faq18ol.htm Rerouting/Forwarding E-Mail      [Rerouting/Forwarding E-Mail]

............ Translated by Obbe-Jan Bakker.
faq18om.htm Hamster and Outlook ™      [Outlook FAQ]

............ Translated by ANT-ilic.
faq18on.htm Hamster and Regular Expressions (RegEx)      [RegEx FAQ]

............ Translated by Obbe-Jan Bakker.

OJB Type-Error,German: Scores.hast
faq18oo.htm Hamster and Outlook Express      [OE FAQ]

............ Translated by Obbe-Jan Bakker.
faq18op.htm How e-mails are routed with Hamster      [Mail red FAQ]

............ Translated by Obbe-Jan Bakker.
faq18q8.htm Hamster and SSL      [SSL FAQ]

............ TODO not yet translated or incomplete TODO.
faq18q9.htm Overview E-mail-clients for authentication at the local servers      [E-Mail clients and authentication]

............ Translated by Obbe-Jan Bakker.
faq18qa.htm Can I use Hamster with a Router?      [Router_and_Hamster]

............ Translated by Obbe-Jan Bakker.
faq18qb.htm Install new Hamster versions (Update)      [Hamster update]

............ Translated by Obbe-Jan Bakker.
faq18qc.htm Hamster and authentication      [Hamster and authentication]

............ TODO not yet translated or incomplete TODO.
faq18qd.htm Hamster and secure passwords      [Hamster and secure passwords]

............ TODO not yet translated or incomplete TODO.
faq18qe.htm Hamster and IMAP-Clients      [Hamster and IMAP-Clients]

............ Translated by Obbe-Jan Bakker.
file3oz4.htm Files and directories      [Directory structure]

............ Translated by Obbe-Jan Bakker.
file3p0w.htm Files in the " (main folder) "      [Overview]

............ Translated by Heiko Studt.
file3p2o.htm Files in the " (main folder) \ server "      [Server - main folder]

............ Translated by Obbe-Jan Bakker.
file3p4g.htm Files in the " (main folder) \ server \ (server name) "      [Files in the folder for each separate server]

............ Translated by Obbe-Jan Bakker.
file3p68.htm Files in the " (main folder) \ Groups "      [Groups - main folder]

............ Translated by Obbe-Jan Bakker.

OJB error in German: Scorfiles ->Scorefiles
file3p80.htm Files in the " (main folder) \ News.out "      [News.Out]

............ Translated by Obbe-Jan Bakker.
file3p9s.htm Files in the " (main folder) \ Groups \ (groups name) "      [Files in the folder for each separate group]

............ Translated by Obbe-Jan Bakker.
file3p9s-INI.htm File: (main folder)\Groups\$Group\Data.ini      [Data.ini]

............ Translated by Obbe-Jan Bakker.
file3pbk.htm Files in the " (main folder) \ Mails "      [Mails - main folder]

............ Translated by Obbe-Jan Bakker.
file3pdc.htm Files in the " (main folder) \ Mails \ Mail.out "      [Mail.Out]

............ Translated by Obbe-Jan Bakker.
file3pf4.htm Files in the " (main folder) \ mails \ admin "      [Admin]

............ Translated by Heiko Studt.
file3pf9.htm Files in the " (main folder) \ Mails \ (user) "      [Files in the folders of the separate 'Users']

............ Translated by Obbe-Jan Bakker.
file3s4w.htm File: (main folder) \ IPAccess.hst      [IPAccess.hst]

............ Translated by Obbe-Jan Bakker.
file3s6o.htm Files in the " (main folder) \ Logs "      [Files in the Logs folder]

............ Translated by Obbe-Jan Bakker.
file3vao.htm File: (main folder) \ Scores.hst      [Scores.hst]

............ Translated by Obbe-Jan Bakker.
file3vao-RE.htm Regular expressions in Hamster      [Regular Expressions]

............ Translated by Obbe-Jan Bakker.
file3ygg.htm File: (main folder) \ MailFilt.hst      [MailFilt.hst]

............ Translated by Paul Batchie.

OJB notifyoff example added (suggested by Laurence)
file41m8.htm File: %main Path%\Hamster.ini      [Hamster.ini]

............ Translated by Heiko Studt, updated by Obbe-Jan Bakker.

[HelpIDs] removed, is part of language-file not hamster.ini file

error in German: [Killist] ->[KillList]

error in German: [EditSrcipts] ->[EditScripts]

error (?) in German: [Online-menü] ->[Online-menu]
file41o0.htm File: %main Path%\Hamster.ini Section [Directories]      [Hamster.ini [Directories]]

............ Translated by Heiko Studt and Obbe-Jan Bakker.
file41ps.htm File: %main Path%\Hamster.ini Section [Setup]      [Hamster.ini [Setup]]

............ Translated by Heiko Studt and Obbe-Jan Bakker.
file41rk.htm File: %main Path%\Hamster.ini Section [Main]      [Hamster.ini [Main]]

............ Translated by Heiko Studt and Obbe-Jan Bakker.
file41tc.htm File: %main Path%\Hamster.ini Section [Actions]      [Hamster.ini [Actions]]

............ Translated by Heiko Studt and Obbe-Jan Bakker.
file41ww.htm File: %main Path%\Hamster.ini (misc sections)      [Hamster.ini [other sections]]

............ Translated by Heiko Studt and Obbe-Jan Bakker.
file44s0.htm File: (main folder)\Server\$Server\Server.ini      [Server.ini]

............ Translated by Heiko Studt.

small additions to [NewGroups] 4-Digit-Years (y2k) and [Pull] Threads (0)
file47xs.htm File: (mail folder) \ MAlias.hst      [MAlias.hst]

............ Translated by Obbe-Jan Bakker.
hams02gg.htm Release Notes      [Release Notes]

............ Translated by Lawrence Mitchell, corrected by Shehu Dikko, updated by OJB.
hams02ls.htm Links to Hamster-related sites and infos      [Links to Hamster-related sites and infos]

............ Translated by Heiko Studt.
hams02nk.htm Acknowledgements      [Acknowledgements]

............ Translated by Obbe-Jan Bakker.
hams02uo.htm License and copyrights      [License and copyrights]

............ Translated by Obbe-Jan Bakker.
hams13fy.htm Hamster-Classic Vr. 2.0.0      [Introduction]

............ Translated by Lawrence Mitchell.
hams3qt0.htm Hamster-Classic Vr. 2.0.0 28.09.02      [Overview]

............ Translated by Lawrence Mitchell.
hams42y8.htm Overview of the data flow of news-articles in Hamster      [Data flow]

............ Translated by Obbe-Jan Bakker.
hams9lf4.htm Installation      [Installation]

............ Translated by Lawrence Mitchell / Obbe-Jan Bakker.
helpabou.htm Menu: Help / About      [About]

............ Translated by Obbe-Jan Bakker.
helpcont.htm Menu: Help / Contents      [Contents]

............ Translated by Obbe-Jan Bakker.
helphelp.htm Menu: Help / All helpfiles      [All helpfiles]

............ Translated by Obbe-Jan Bakker.
helphist.htm Menu: Help / history      [History]

............ Translated by Obbe-Jan Bakker.
helpinfo.htm Menu: Help / System-Information      [System-Information]

............ Translated by Obbe-Jan Bakker.
hint1ks4.htm Maintainer.      [Copyright]

............ Translated by Obbe-Jan Bakker.
hint1n75.htm NNTP      [NNTP]

............ Translated by Obbe-Jan Bakker.
hint1n76.htm POP3      [POP3]

............ Translated by Obbe-Jan Bakker.
hint1n77.htm SMTP      [SMTP]

............ Translated by Obbe-Jan Bakker.
hint1n78.htm SMTP AUTH      [SMTP AUTH]

............ Translated by Obbe-Jan Bakker.
hint1n79.htm SSL      [SSL]

............ Translated by Obbe-Jan Bakker.
hint1n7a.htm TLS      [TLS]

............ Translated by Obbe-Jan Bakker.
hint1n7b.htm Header      [Header]

............ Translated by Obbe-Jan Bakker.
hint1n7c.htm FQDN      [FQDN]

............ Translated by Obbe-Jan Bakker.
hint1n7d.htm IMAP      [IMAP]

............ Translated by Obbe-Jan Bakker.
hint1n8w.htm X.509      [X509]

............ Translated by Obbe-Jan Bakker.
hint1n8x.htm PEM      [PEM]

............ Translated by Obbe-Jan Bakker.
hint1n8y.htm TCP      [TCP]

............ Translated by Obbe-Jan Bakker.
hint1n8z.htm Port      [Port]

............ Translated by Obbe-Jan Bakker.
hint1n90.htm SASL      [SASL]

............ Translated by Obbe-Jan Bakker.
hint1n91.htm ReCo      [RECO]

............ Translated by Obbe-Jan Bakker.
hscr06g4.htm Hamsterscripts: Module      [Module (Scripts)]

............ Translated by Obbe-Jan Bakker.
hscr08q6.htm Hamster Script, version 2 ("hs2", suffix: ".hsc")      [Hamster-Scripts]

............ Translated by Paul Batchie.
hscr0ctv.htm Hamsterscripts: Expressions and operators      [Expressions and operators]

............ Translated by Paul Batchie.
hscr55bk.htm Hamsterscripts: Jumps      [Jumps]

............ Translated by Paul Batchie.
hscr5ahw.htm Hamsterscripts: Conditionals, branches      [Conditionals]

............ Translated by Paul Batchie.
hscr5bz9.htm Hamster-Scripts: Statements and comments      [Instructions and comments]

............ Translated by Paul Batchie.
hscr5gry.htm Hamsterscripts: Call by Action      [Syntax-overview (scripts)]

............ Translated by Heiko Studt and Obbe-Jan Bakker.
hscr5kj2.htm Hamster-Scripts: built-in Statements      [Hamster-Scripts: Statements]

............ Translated by Paul Batchie.

quit() is missing in German version
hscr5v00.htm Hamster-Scripts: Loops      [Loops]

............ Translated by Obbe-Jan Bakker.
hscr64vg.htm Hamsterscripts: Concurrent Scripts      [Concurrent Scripts]

............ TODO not yet translated or incomplete TODO.
hscr744u.htm Hamster-Scripts: Functions (general)      [Functions, general (Scripts)]

............ Translated by Paul Batchie.
hscr8kry.htm Hamster-Scripts: built-in Functions (Server)      [Functions, hamster (scripts)]

............ Translated by Paul Batchie.

in German: change "history.dat" ->"hist*.dat"

in German: Hammessage(16,) wrong, only param 1 is defined

in German: HamArtDeleteMidInGroup is missing, HamArtDelete is wrong
hscr8lk3.htm Hamsterscripts: Procedures and Functions      [Procedures and Functions]

............ Translated by Obbe-Jan Bakker.
hscr8vxf.htm Hamster-Scripts: Preprocessor-Commands      [Preprocessor-commands]

............ Translated by Paul Batchie.
hscr9aul.htm Hamsterscripts: call by Command Line      [Syntax-overview (Scripts)]

............ Translated by Obbe-Jan Bakker.
hscr9oa4.htm Hamsterscript: Boolean Expressions      [Boolean expressions]

............ Translated by Obbe-Jan Bakker.
hscr9otd.htm Hamsterscript: Variables, Constants and datatypes      [Variables, Constants and Datatypes]

............ Translated by Obbe-Jan Bakker.
menu02i8.htm Menu: Online / stop all tasks      [Stop all tasks]

............ Translated by Obbe-Jan Bakker.
menu0yeo.htm Menu: local servers / start / stop news server (NNTP)      [Start / stop News-server (NNTP)]

............ Translated by Obbe-Jan Bakker.
menu11kg.htm Menu: local servers / start / stop mail server (POP3)      [Start / stop Mail-server (POP3)]

............ Translated by Obbe-Jan Bakker.
menu14q8.htm Menu: local servers / start / stop mail server (SMTP)      [Start / stop Mail-server (SMTP)]

............ Translated by Obbe-Jan Bakker.
menu17w0.htm Menu: local servers / open Dir(s) for News/Mail...      [Open Dir(s) for News/Mails ...]

............ Translated by Obbe-Jan Bakker.

OJB a bit more info than in German.
menu1b1s.htm Menu: local servers / start/stop mail server (IMAP)      [Start / stop Mail-server (IMAP)]

............ Translated by Obbe-Jan Bakker.
menu1e7k.htm Menu: local servers / start/stop remote control Telnet-server (RECO)      [Start / stop remote control Telnet-server (RECO)]

............ Translated by Obbe-Jan Bakker.
menu26y8.htm Automation... / General      [General]

............ Translated by Obbe-Jan Bakker.
menu2a40.htm Automation / Actions      [Actions]

............ Translated by Obbe-Jan Bakker.
menu2d9s.htm Automation... / Load Articles by MID      [Load Articles by MID]

............ Translated by Obbe-Jan Bakker.

OJB more info than German
menu2mr4.htm Disable/Enable Advanced Configuration      [Disable/Enable Advanced Configuration]

............ Translated by Obbe-Jan Bakker.
menu2v1s.htm Menu      [Menus]

............ Translated by Heiko Studt, corrected by Shehu Dikko.

OJB Menu: File / Killfile-Log/-settings is much more detailed than German verion

OJB Menu 'Several enhancements, more complete, compared to German.

OJB error in German: "Erweiterte Einstellunegn
menu2y7k.htm Menu: Configuration / Killfile-Log/-Settings...      [Killfile-Log/-Settings...]

............ Translated by Obbe-Jan Bakker.

OJB German: "killfile.log" ->"kills.log"

OJB German: Das zweite Fenster ist ein einfacher Editor ->Das dritte Fenster ist ein einfacher Editor

OJB German: Datei/Alle Änderungen speichen ->Datei/Alle Änderungen verwerfen
menu2y9c.htm Menu: Configuration / Killfile-Log/-Settings/File: Set sort-sequence...      [Score file, Set sort-sequence]

............ Translated by Obbe-Jan Bakker.

OJB type-error in German: Zusatzsotierung ->Zusatzsortierung
menu2yb4.htm Menu: Configuration / Killfile-Log/-Settings.../File: Save all changes      [Score file, changes store]

............ Translated by Obbe-Jan Bakker.
menu2ycw.htm Menu: Configuration / Killfile-Log/-Settings.../File: Undo all changes      [Score file, changes reject]

............ Translated by Obbe-Jan Bakker.
menu2yeo.htm Menu: Configuration / Killfile-Log/-Settings.../File: Exit      [Score file, Exit]

............ Translated by Obbe-Jan Bakker.
menu31dc.htm Menu: Configuration / Killfile-Log/Settings: Kill-/scorefile      [Scorefile, Configuration]

............ Translated by Heiko Studt, corrected by Shehu Dikko, updated by Obbe-Jan Bakker.
menu31f4.htm Menu: Configuration / Killfile-Log/-Settings.../Entries: Show Details...      [Score file, detail]

............ Translated by Obbe-Jan Bakker.
menu31gw.htm Menu: Configuration / Killfile-Log/-Settings.../Entries: Select all      [Score file, Select all]

............ Translated by Obbe-Jan Bakker.
menu31io.htm Menu: Configuration / Killfile-Log/-Settings.../Entries: Retrieve whole thread      [Score file, Retrieve whole thread]

............ Translated by Obbe-Jan Bakker.
menu31kg.htm Menu: Configuration / Killfile-Log/-Settings.../Entries: Delete whole thread      [Score file, Delete whole thread]

............ Translated by Obbe-Jan Bakker.
menu31m8.htm Menu: Configuration / Killfile-Log/-Settings.../Entries: Mark for retrieval      [Score file Mark for retrieval]

............ Translated by Obbe-Jan Bakker.
menu31o0.htm Menu: Configuration / Killfile-Log/settings: delete      [Score file, deleting]

............ Translated by Heiko Studt, corrected by Shehu Dikko.
menu31ps.htm Menu: Configuration / Killfile-Log/-Settings.../Entries: Scorefile-Test      [Score file, score test]

............ Translated by Obbe-Jan Bakker.
menu34j4.htm Menu: file / Rebuild global lists      [Rebuild global lists]

............ Translated by Obbe-Jan Bakker.
menu37ow.htm Menu: file / purge all groups      [Purge all groups]

............ Translated by Obbe-Jan Bakker.

German: Menü "Einstellungen / Lokale Server" add / newsserver(NNTP) and link

added explanation of keepdays
menu3auo.htm Menu: file / rebuild history      [Rebuild news history]

............ Translated by Obbe-Jan Bakker.
menu3e0g.htm Menu: file / Clear counters & log      [Clear counters & log]

............ Translated by Heiko Studt.
menu3h68.htm Menu: file / Refresh menu items      [Refresh menu items]

............ Translated by Obbe-Jan Bakker.
menu43lc.htm Menu: Configuration / Accounts & Passwords / Local Accounts      [Local Accounts]

............ Translated by Lawrence Mitchell.
menu43u8.htm Menu: Configuration / Accounts & passwords... / Aliases for accounts      [Aliases for accounts]

............ Translated by Obbe-Jan Bakker.
menu46r4.htm Menu: Configuration / Accounts & passwords... / Passwords      [Passwords]

............ Translated by Obbe-Jan Bakker.

English in German help: Benutzernamen and Passworte
menu49ww.htm Menu: Configuration / Local server... / General (local domains)      [General (local domains)]

............ Translated by Obbe-Jan Bakker.

German: typo: Mailausliferung->Mailauslieferung

typo: ddns ->dns

typo: kryptongrafisch ->kryptografisch
menu4d2o.htm Menu: Configuration / local server... / NNTP      [News NNTP]

............ Translated by Obbe-Jan Bakker.
menu4g8g.htm Menu: Configuration / local server... / POP3      [Mail POP3]

............ Translated by Obbe-Jan Bakker.
menu4ga8.htm Menu: Configuration / local server... / SMTP      [Mail SMTP]

............ Translated by Obbe-Jan Bakker.
menu4gc0.htm Menu: Configuration / local server... / Remote Control      [Remote control (Telnet)]

............ Translated by Obbe-Jan Bakker.
menu4gds.htm Menu: Configuration / Local server... / tab: general / button: IP-Access      [Edit IP-Access]

............ Translated by Obbe-Jan Bakker.

German: typo: Voreinstllung->VorEinstellung

typo: Komentare->Kommentare
menu4je8.htm Menu: Configuration / Edit special files      [Edit special files]

............ Translated by Obbe-Jan Bakker.
menu4je8-INI.htm Menu: Configuration / Edit special files / Edit hamster.ini      [Edit Hamster.ini...]

............ Translated by Obbe-Jan Bakker.
menu4je8-MOVED.htm Menu: Configuration / Edit special files / news-score-/Killfile      [Edit News-score-/Killfile]

............ Translated by Heiko Studt.
menu4mk0.htm Menu: Configuration / Reload Configuration      [Reload configuration]

............ Translated by Obbe-Jan Bakker.
menu4mk0-MOVED.htm Menu: Configuration / Edit special files / mail-score-/Killfile      [Edit Mail-Score-/Killfile]

............ Translated by Heiko Studt.
menu4svk.htm Menu: Configuration / local server... / IMAP      [Mail IMAP]

............ Translated by Obbe-Jan Bakker.
menu5c4w.htm Menu: script / (available Scripts)      [( available scripts )]

............ Translated by Obbe-Jan Bakker.
menu5fao.htm Menu: script / Scripts and modules      [Manage scripts and modules]

............ Translated by Heiko Studt.
menu5lm8.htm Menu: script / Stop all scripts      [Stop all scripts]

............ Translated by Obbe-Jan Bakker.
menu6kog.htm Context menu: Show single thread      [Show single thread]

............ Translated by Obbe-Jan Bakker.
menu6nu8.htm Context menu: Copy single line to clipboard      [Copy single line to clipboard]

............ Translated by Heiko Studt.
menu6r00.htm Context menu: Copy all lines to clipboard      [Copy all lines to clipboard]

............ Translated by Heiko Studt.
menu6u5s.htm Clear log(s)      [Clear log(s)]

............ Translated by Obbe-Jan Bakker.
menu6xbk.htm Context menu: protocol for newsJobs queue      [Protocol for Newsjobs order]

............ Translated by Obbe-Jan Bakker.
menu8hbk.htm Menu: Configuration / General Settings / Visual      [Visual]

............ Translated by Lawrence Mitchell.
menu8hkg.htm Menu: Configuration / General Settings / Logfiles      [Logfiles]

............ Translated by Obbe-Jan Bakker.
menu8khc.htm Menu: Configuration / General Settings/ Online-Menu      [Online-Menu]

............ Translated by Lawrence Mitchell.
menu8nn4.htm Menu: Configuration / General Settings / InternalGroups      [Internal groups]

............ Translated by Lawrence Mitchell.
menu8nsg.htm Menu: Configuration / General settings... / SSL      [SSL]

............ Translated by Obbe-Jan Bakker.
menu8nw0.htm Menu: Configuration / General Settings / Misc.      [Misc.]

............ Translated by Lawrence Mitchell.
menu8qsw.htm Menu: Configuration / News: server, groups, pulls... / settings      [Settings]

............ Translated by Obbe-Jan Bakker.
menu8tyo.htm Menu: Configuration / News: server, groups, pulls... / tab: Newsserver      [News server]

............ Translated by Obbe-Jan Bakker.
menu8x4g.htm Menu: Configuration / News: server, groups, pulls... / tab: Newsgroups      [News groups]

............ Translated by Obbe-Jan Bakker.
menu8xdc.htm Menu: Configuration / News: server, groups, pulls... / tab: Newsserver: / button News-Pulls      [Configuration, News (groups) Newsserver]

............ Translated by Obbe-Jan Bakker.
menu90a8.htm Menu: Configuration / News: server, groups, pulls... / tab: News-Pulls      [News-Pulls]

............ Translated by Obbe-Jan Bakker.
menu90j4.htm Menu: Configuration / News: server, groups, pulls... / tab: News-Pulls / button: Add       [Configuration, News, News-Pulls]

............ Translated by Obbe-Jan Bakker.
menu93g0.htm Menu: Configuration / Mail: settings & server... / POP3-Settings      [POP3-Settings]

............ Translated by Paul Batchie.
menu96ls.htm Menu: Configuration / mail (server) / POP3-Mailserver      [POP3-Mailserver]

............ Translated by Paul Batchie, updated by Obbe-Jan Bakker.
menu96uo.htm Menu: Configuration/ Mail Server / SMTP-Settings      [SMTP-Settings]

............ Translated by Paul Batchie.
menu99rk.htm Menu: Configuration/ Mail Server / SMTP Mailserver      [SMTP-Mailserver]

............ Translated by Paul Batchie, updated by Obbe-Jan Bakker.
menu9pv4.htm Menu: Online / 1-9:...      [1-9:user-defined menu's]

............ Translated by Heiko Studt.
menu9t0w.htm Menu: Online / all servers (News+Mail)      [All servers (News+Mail)]

............ Translated by Heiko Studt.
menu9w6o.htm Menu: Online / NNTP-/POP3-/SMTP- server      [Single NNTP-/POP3-/SMTP- server]

............ Translated by Obbe-Jan Bakker.
menu9zcg.htm Menu: Online / RAS-dialing      [RAS-dialing (open connection)]

............ Translated by Obbe-Jan Bakker.
menu9zlc.htm Menu: Online / RAS-Hangup      [RAS-hangup (close connection)]

............ Translated by Obbe-Jan Bakker.
menuexit.htm Menu: file / Exit      [Exit]

............ Translated by Obbe-Jan Bakker.
menuhost.htm Menu: Configuration / Edit special files / Edit hosts (resolve domains to IPs)      [Edit hosts (resolve domains to IPs)...]

............ Translated by Obbe-Jan Bakker.
reco7els.htm Remote control of Hamster      [Remote Control]

............ Translated by Obbe-Jan Bakker.
reco7euo.htm Remote control: General basics and installation      [Remote control: general basics and installation]

............ Translated by Obbe-Jan Bakker.
reco7hrk.htm Syntax for the Remote Control server      [Remote control syntax]

............ Translated by Obbe-Jan Bakker.
tech2jlc.htm Hamster-Event-objects (Win32)      [Hamster-Event-Objects]

............ Translated by Obbe-Jan Bakker.

error in Delphi example: "CloseHandle( hdlEvent );" -> "CloseHandle( evtHamsterIsIdle );"
tech2mr4.htm Hamster-Mutex-Objects (Win32)      [Hamster-Mutex-Objects]

............ Translated by Obbe-Jan Bakker.
tech82pc.htm Automation (OLE) OLE-interface for other programs      [Automation (OLE) Interface to other programs]

............ Translated by Heiko Studt.

in German: change "history.dat" ->"hist*.dat"

Source: C:\AA\Src20020607\EnHlp\hamster_en_allpages.html - (119)


Copyright

Maintainer.

Translated by Obbe-Jan Bakker

The Maintainer of "Hamster Classic" is:

Thomas G. Liesner, tgl@gmx.de

website http://www.tglsoft.de

Source: C:\AA\Src20020607\EnHlp\html\hint1ks4.htm - (120)


hint1n75.htm
NNTP

Translated by Obbe-Jan Bakker

Network news transfer Protocol,

RFC 977, Kantor and Lapsley in 1986

Software protocol for the exchange of news in Usenet

Source: C:\AA\Src20020607\EnHlp\html\hint1n75.htm - (121)


hint1n76.htm
POP3

Translated by Obbe-Jan Bakker

Post Office Protocol

STD 53/RFC 1939 J.Myers, Carnegie Mellon, M.Rose 1996

Software protocol for fetching E-mails

Source: C:\AA\Src20020607\EnHlp\html\hint1n76.htm - (122)


hint1n77.htm
SMTP

Translated by Obbe-Jan Bakker

Simple Mail Transfer Protocol

RFC 821 Jonathan B. Postel 1982

Software protocol for sending of E-mails

Source: C:\AA\Src20020607\EnHlp\html\hint1n77.htm - (123)


hint1n78.htm
SMTP AUTH

Translated by Obbe-Jan Bakker

Simple Mail Transfer Protocol Authentication

RFC 2554 J.Myers and RFC 2831 P.Leach, C.Newman

Software-protocol-extension for the authorization examination with sending of E-mails

Source: C:\AA\Src20020607\EnHlp\html\hint1n78.htm - (124)


hint1n79.htm
SSL

Translated by Obbe-Jan Bakker

Secure Socket Layer

Cryptographic procedure to the protection of TCP-connections between server and Client

For further information see also http://www.openSSL.org

Source: C:\AA\Src20020607\EnHlp\html\hint1n79.htm - (125)


hint1n7a.htm
TLS

Translated by Obbe-Jan Bakker

Transportation Layer Security

Cryptographic procedure to the protection of TCP-connections between server and Client

For further information see also http://www.openSSL.org and http://www.stunnel.org

Source: C:\AA\Src20020607\EnHlp\html\hint1n7a.htm - (126)


hint1n7b.htm
Header

Translated by Obbe-Jan Bakker

Headers from articles

The 'header' from an article or E-Mail means a separate top-line or all top-lines together. Headers steer the further spreading of articles and E-mails, represent their status or transport technical information to the representation of the article or E-mail.

Source: C:\AA\Src20020607\EnHlp\html\hint1n7b.htm - (127)


hint1n7c.htm
FQDN

Translated by Obbe-Jan Bakker

Full Qualified Domain Name

The FQDN is the unique and universal description of a computer or a group of computers. It is unique worldwide and serves for the unambiguous identification of a computer or a computer group and from this computer or computer group the sent article.

Source: C:\AA\Src20020607\EnHlp\html\hint1n7c.htm - (128)


hint1n7d.htm
IMAP

Translated by Obbe-Jan Bakker

Internet Message Access Protocol

RFC 2060, M. Crispin 2060, University of Washington, December 1996

Category: standards Track

Source: C:\AA\Src20020607\EnHlp\html\hint1n7d.htm - (129)


hint1n8w.htm
X.509

Translated by Obbe-Jan Bakker

ITU-Standard for digital cryptographic certificates.

These are for secure identification of persons, e-mail adresses and/or Internet-servers.

Source: C:\AA\Src20020607\EnHlp\html\hint1n8w.htm - (130)


hint1n8x.htm
PEM

Translated by Obbe-Jan Bakker

Plaintext Encryption Message

Format for the transport of cryptographic key values, where these keys use only 7 bits of a byte.

Source: C:\AA\Src20020607\EnHlp\html\hint1n8x.htm - (131)


hint1n8y.htm
TCP

Translated by Obbe-Jan Bakker

Abbreviation for Transmission Control Protocol

TCP is the most widely used protocol for the network-connection between client and server. It is based on the transportprotocol IP and ensures an error-free connection. TCP ensures that all datapackets incoming by IP, are re-arranged to the correct order and corrected if necessary.

Source: C:\AA\Src20020607\EnHlp\html\hint1n8y.htm - (132)


hint1n8z.htm
Port

Translated by Obbe-Jan Bakker

The name port is used in the context of the Internet-Protocols TCP and UDP for the adressing of a data-channel within both these protocols. The range of portnumbers is from 0 till 65535. On many systems portnumber 0 can not be used. Many ports, especially those in the range of 0-1024, are reserved for special services. The list of reserved ports can be found at the IANA http://www.iana.org. On many operating systems ports can also be accessed by a name. The assignment of names to portnumbers is usually done by a file with the name "services".

Some examples:

Name     Port
SMTP       25
POP3      110
NNTP      119
IMAP      143

Source: C:\AA\Src20020607\EnHlp\html\hint1n8z.htm - (133)


hint1n90.htm
SASL

Translated by Obbe-Jan Bakker

Simple Authentication and Security Layer

Procedure for a consistent use of several authentication mechanisms.

Some known authentication mechanisms are CRAM-MD5, LOGIN, PLAIN etc.

Source: C:\AA\Src20020607\EnHlp\html\hint1n90.htm - (134)


hint1n91.htm
ReCo

Translated by Obbe-Jan Bakker

Remote Control Server

Server for the remote control of Hamster by using a telnet client.

Source: C:\AA\Src20020607\EnHlp\html\hint1n91.htm - (135)


Defining colors

Defining colors

Translated by Obbe-Jan Bakker

Colors can be entered by color name or by hexadecimal RGB-values, format $BBGGRR.
These color names map either directly to the closest matching color in the system palette (for example,
clBlue maps to blue) or to the corresponding system screen element color defined in the Color section
of the Windows Control panel (for example, clBtnFace maps to the system color for button faces).

If you specify a color as a specific 3-byte hexadecimal number instead of using a color name,
the low three bytes represent RGB color intensities for blue, green, and red, respectively.
The value $FF0000 represents full-intensity, pure blue, $00FF00 is pure green, and $0000FF is pure red.
$000000 is black and $FFFFFF is white.

The following two tables list the color constants from the Delphi Graphics unit.
The first table list the colors that map to the closest matching color in the system palette,
while the second table list the colors that are defined in the Windows Control panel.

Value           Meaning
clNone          White on Windows 9x, Black on NT.
clAqua          Aqua
clBlack         Black
clBlue          Blue
clCream         Cream
clDkGray        Dark Gray
clFuchsia       Fuchsia
clGray          Gray
clGreen         Green
clLime          Lime green
clLtGray        Light Gray
clMaroon        Maroon
clMedGray       Medium Gray
clMoneyGreen    Mint green
clNavy          Navy blue
clOlive         Olive green
clPurple        Purple
clRed           Red
clSilver        Silver
clSkyBlue       Sky blue
clTeal          Teal
clWhite         White
clYellow        Yellow

Value                      Meaning
clScrollBar                Current color for the of scroll bar track.
clBackground               Current background color of the Windows desktop
clActiveCaption            Current color of the title bar of the active window
clInactiveCaption          Current color of the title bar of inactive windows
clMenu                     Current background color of menus
clWindow                   Current background color of windows
clWindowFrame              Current color of window frames
clMenuText                 Current color of text on menus
clWindowText               Current color of text in windows
clCaptionText              Current color of the text on the title bar of the active window
clActiveBorder             Current border color of the active window
clInactiveBorder           Current border color of inactive windows
clAppWorkSpace             Current color of the application workspace
clHighlight                Current background color of selected text
clHightlightText           Current color of selected text
clBtnFace                  Current color of a button face
clBtnShadow                Current color of a shadow cast by a button
clGrayText                 Current color of text that is dimmed
clBtnText                  Current color of text on a button
clInactiveCaptionText      Current color of the text on the title bar of an inactive window
clBtnHighlight             Current color of the highlighting on a button
cl3DDkShadow               Windows 95/NT 4.0 only: Dark shadow for three-dimensional display elements
cl3DLight                  Windows 95/NT 4.0 only: Light color for three-dimensional display elements
                           (for edges facing the light source)
clInfoText                 Windows 95/NT 4.0 only: Text color for tool tip controls
clInfoBk                   Windows 95/NT 4.0 only: Background color for tool tip controls
clGradientActiveCaption    Windows 98/2000: Right side color in the color gradient of an active
                           window's title bar. clActiveCaption specifies the left side color.
clGradientInactiveCaption  Windows 98/2000: Right side color in the color gradient of an inactive
                           window's title bar. clInactiveCaption specifies the left side color.
clDefault                  The default color for the control to which the color is assigned.

Source: C:\AA\Src20020607\EnHlp\html\defcolor.htm - (136)


Antivirus programs

Hamster and anti-virus Programs

Translated by Lawrence Mitchell

How can I set up Hamster to run in tandem with the anti-virus program "Norton Antivirus 2000" from Symantec?

For Norten Antivirus 2002 see last section of this page.

This answer was provided by Roland Aleksa, who has made it freely available. This translation by Lawrence Mitchell.

To ensure that incoming e-mails are scanned on arrival, you need to set up the anti-virus program's POP3 server to act as a buffer between Hamster and the external mail server.

To do this, you need to configure Hamster and your anti-virus program accordingly.

In the case of Norton Antivirus, select "Options / E-mail protection / Protected e-mail clients" and tick the box "Manually configured e-mail client". For other anti-virus programs a similar setup is needed.

Configuring Hamster

Select the menu-item "Configuration / Local server & accounts ... " then select the tab "Mail". Change the POP3 server port from 110 to something else, e.g. 1100.

Next, select the menu-item "Configuration / Mail: settings & server" then select the tab "POP3-Mailserver". Click [Add], then add the following:

Servername: localhost
Username: $username/$remoteservername
Password: $password

The following serves as an example for a GMX account with the following login information:

GMX-POP3-Server: pop.gmx.net
Username: me
Password: xxx

In Hamster, you then enter the following for this account:

Servername: localhost
Username: me/pop.gmx.net
Password: xxx

If you get mails from a number of different servers, each has to be set up as outlined above with the localhost as the server in Hamster. When prompted as to whether you wish to add an alias for this server, answer with "yes". The servers are then distinguished in Hamster by being listed with a number after their name, e.g. localhost, localhost/2 &c.

If you want to use the password variables ($1, $2 &c...) for the new POP3 servers in Hamster-scripts, you also need to change these:

In the menu-item "Configuration / Local server & accounts ..." select "Passwords", the passwords need to be changed/added according to to the following format.

Username: $username/$remoteservername (as above)
Password: $password (as above)

In your scripts you then need to change "localhost" to the correct one (depending on if you have more than one "localhost" or not). i.e. if you now have a server "localhost/2" this has to be added to any scripts you use (where appropriate).

Configuring your mail client

In your mail client you now have to change the connect port for the POP3 server to the new value that you have just set up in Hamster, in the example above, it was 1100.

Here are instructions for a number of different mail clients:

Pegasus 3.12: "Tools / Internet Options / Receiving (POP3) / Advanced POP3 settings"

Connect to server on TCP/IP port: 1100

The Bat!: "Account / Properties / Advanced"

Portnumber POP3 1100

Becky: Select the to be changed account in the "account-tree" at the left.

"Tools / Mailbox-Setup... / Misc. / Port-Numbers"

Enter 1100 next to "POP3"

Calypso:

Mailbox/Accounts/Properties - select the Account, for which the changes will apply. Switch to tab 'mail server', set upper area 'Incoming mail server' 'Port' to 1100. When creating a new account, there is no direct possibility to select the Port, not even at the end of the dialog under properties. The changes are to be carried out therefore after creation of the Accounts.

PostMe 3.0:

Select Edit File/Account - in the upper area select the Account to change. Switch to the tab 'options'. In the lower area , set the POP-Port to 1100.

Phoenix Mail:

Select the account to be changed to the left in the 'account tree' (Treeview of the Accounts and corresponding folders), choose account/properties - there on tab 'retrieve' set the Port to 1100.

Kaufman Mail Warrior:

Select Configure/Manage Accounts - choose Account, click on 'Properties'. Switch to tab 'Advanced', set 'POP3 server port' to 1100.

General Questions

Question: Mails with attachments sometimes arrive corrupted or not at all in Hamster.

Answer: Some virus scanners which automatically scan and disinfect e-mails when working as mail-proxies can cause problems for Hamster. Either try switching this aspect of the scanner off and/or update the virus scanner.

Tips for Norton AntiVirus2002

By Daniel Srostlik. (translated by Obbe-Jan Bakker)

To scan e-mails with the version 2002 of Norton AntiVirus, the hamster does not have to be specially configured.

In the settings of NAV2002, only the e-mail scanner must become activated (can be set separately for mail in and mail out). If one activated the corresponding option, a symbol is faded in the Taskbar in where an e-mail is being scanned.

Unfortunately with a found virus a window with the result is presented, which one must confirm.

Thus this Scanmethod with the NAV2002 is not applicable for a server.

In this case, one should switch to the file scanner of NAV2002.

The command line to start a Scan with automatic isolation and/or deletion of a virus from a hs2-Script: (path must naturally be adapted) is:

execute( "c:\programs\Norton Antivirus\navw32.exe c:\Hamster\Mails\*.* /S+ /M+ /B+ /NORESULTS /HEUR:3", "", 1, true )

The single command lines parameters are explained in the help for NAV2002.

Note: The file scan method should not be used with Norton anti-virus versions before version 2002, because these versions cannot scan MIME-encoded attachments.

Source: C:\AA\Src20020607\EnHlp\html\faq18kx.htm - (137)


Exceeding the user limit

Exceeding the user limit

Translated by Lawrence Mitchell

I always get the following error message when connecting to a newsserver.

> "newsjobs for $newsserver stopped due to exceeding the user limit"

Hamster is a multi-thread program, and thus, when you try to pull news it tries to pull all groups simultaneously. However, most ISPs only allow between 1 and 4 parallel connections to their newsserver from one IP address. If Hamster finds some threads are being stopped, it cuts them short and gives a warning.

This problem, therefore, is merely a warning, not an error message. Error messages appear in red in Hamsters' window, warning messages in yellow.

Source: C:\AA\Src20020607\EnHlp\html\faq18ky.htm - (138)


Error message - missing AUTH when sending e-mail

Error message -- missing AUTH when sending e-mail

Translated by Lawrence Mitchell

When sending email, I get the error message:

>> $date$timestamp {threadID} SMTP $smtpserver: Missing AUTH in EHLO reply!

Did you perhaps accidentally select SMTP-AUTH for the SMTP-server? You can check/change this setting in the menu SMTP-Mailserver.

Source: C:\AA\Src20020607\EnHlp\html\faq18kz.htm - (139)


Start of the local xxxx-server failed

Start of the local xxxx-server failed

Translated by Lawrence Mitchell

The named server cannot be started.

The most common cause of this is that another program is already using the TCP/IP port needed by the server, e.g a virus scanner for e-mail (such as Norton Anti-Virus). In this case, the anti-virus program is already running as a POP3 server and is recognized as such by the OS.

Another cause could be that another instance of Hamster is running (from an other directory). One way of solving this dilemma is to reconfigure Hamster to run on different server ports (and then configure your news/mailreader as well).

One further possible cause is that a firewall (e.g. ZoneAlarm) is running, and that you need to configure its ruleset to allow Hamster to connect to the relevant ports. If this is the case, check the firewall's documentation to find out how to do this.

A further cause for it that hamster cannot start the servers, can be incorrect binding of the server to an IP. In this case comes the error message 10049 in the log (Cannot assign requested address.)

Apart from an incorrect manual input in the fields “Bind to IP:” in the menus “Configuration| Local server...|NNTP/POP3/SMTP, can be a dynamic address assignment in the network a cause for a wrong entry. If it is not possible to assign a permanent IP to the Hamster, one can bind the servers with the following Script to the current actual (dynamic) IP of the network card: http://micha-wr.bei.t-online.de/hamster/files/hs2-055-DHCP-bind.zip

An other possible cause for the windows versions 98, ME, 2000 and XP is that through the Media-Sense Detector of the network card driver the IP-Address for the binding of the local servers becomes temporarily deactivated. This happens always then, if (as long as) at the network card, at which the local servers of the hamster are bound that counterpart is missing (for example a hub or router). That happens mostly if no hub/switch is used, but rather two computers are connected with a so-called crossover cable. This 'Feature' however can be deactivated.

See to this topic also: http://support.microsoft.com/support/kb/articles/Q239/9/24.ASP

Source: C:\AA\Src20020607\EnHlp\html\faq18l0.htm - (140)


Hamster and Forte Agent

Hamster and Forte Agent

Translated by Lawrence Mitchell

If you're running Forte Agent and want to switch from reading news directly from an external newsserver to Hamster, you can find relevant information here.

Note, if you want to migrate your existing articles/mails when changing server, check the Agent FAQ, item 3.7.1.2. This FAQ can be found at "http://www.westfalen.de/paefken/forteagent/" and is also posted every 15 days to newsgroup "de.comm.software.forte-agent".

Entries you need to make are enclosed in <> signs, and the whole word is in bold, fixed-width.

Configuration for the English version of Forte Agent:

1. Select the menu-item "Options / User and System Profile / (Tab) User". There, near "Newsserver Login", tick the box "Login with a username and password". For "username", enter <admin>. For the password, enter the admin account's Hamster password. Also select "Remember password between sessions".

2. Next, select the menu-item "Options / User and System Profile / (Tab) System". Under "Newsserver", enter <localhost>. Also enter <localhost> for the "Send email messages with SMTP, Email Server" option.

3. Select the tab "Dial Up" in the menu-item "Options / User and System Profile" and untick the option "Open dial up connection before going online.

4. Finally, select the menu-item "Options / Inbound Email / (Tab) System". For the "POP server", enter <localhost>. For the "Username" enter <admin>. Again, enter the admin account's password in Hamster in the "Password" field and select the box "Remember password between sessions".

5. Once all this is done, all you need to do is start up Hamster, to get news in Agent you just select "Online / Get New Groups".

If you want Hamster, rather than Agent to generate your message-ID, you need to edit your agent.ini file, found in the Data subdirectory of your Agent installation. Here you need to set GenerateID to 0, this can be found in the [Message] section of the file.

Source: C:\AA\Src20020607\EnHlp\html\faq18l1.htm - (141)


Hamster and "large" E-mails

Hamster and "large" E-mail

Translated by Lawrence Mitchell

This FAQ was answered by Martin Diedrich <martin@mdiedrich.de>, the version here was translated by Lawrence Mitchell <wence+ham@newald.homeip.net>

The standard setting for the maximum size of e-mails in Hamster is approx. 2MB. I.e, e-mails larger than this will result in an error message, and the mail will not be sent.

This behaviour is due to the fact that Hamster has a size-restriction on e-mails and news-posts. This size-restriction is is set in the hamster.ini file, here a distinction is made between news posts, sending e-mails and receiving e-mails. The following entries are valid:

Limit for line-length and overall text-length of locally received articles.

;sorted according to protocol:
;Maximum line-length in characters
local.limit.linelen.nntp=1000
local.limit.linelen.pop3=1000
local.limit.linelen.smtp=1000
;Maximum text-size, i.e. maximum size of message in bytes
local.limit.textsize.nntp=2097152
local.limit.textsize.pop3=2097152
local.limit.textsize.smtp=2097152

To change the restrictions, just change the numbers. If you don't want any restrictions in place at all, enter 0 (zero).

You can also change these settings in Hamster under the menu-item "Configuration / Local server & accounts" and then "News or Mail" as appropriate.

Before changing these settings, especially if increasing, or even removing, the size-restrictions, it is worthwhile taking note of the following:

Regarding line-length, SMTP servers do not have to accept line-lengths longer than 1000 characters (including the <CR><LF> end of line), thus lines longer than this may be truncated, see RFC821 for details.

· E-mail attachments are encoded upon sending, this increases their size by a factor of 1.36, thus a 2MB attachment will increase in size to 2.72MB if sent by e-mail (base64 encoding). [For more info see (German site) http://www.mdiedrich.de -> net (ab)use]

· Such large e-mails overload both mail servers and data-transfer routes since the file gets sent through an SMTP server (usually that of the senders ISP) into the internet, possibly through a number of additional mail servers, before it is downloaded by the recipient through a POP3 server. In this way both the SMTP and POP3 servers are overloaded to such an extent that it comes close to a DoS (Denial of Service) attack. To demonstrate this you can try sending a large e-mail to Hamster while other users try to retrieve their e-mails.

· If such large amounts of data are routinely sent by e-mail, think about setting up a FTP (File Transfer Protocol) server, which, as the name suggests, is expressly designed for such use. [Examples for setup and use of FTP see (German site) http://www.mdiedrich.de -> LAN am Netz, net (ab)use].

· In addition to this, the recipient's e-mail client is also spared undue load through this solution since:

Most e-mail clients will save this e-mail in the inbox, it will then probably be saved somewhere else, if the folder isn't compressed, it will actually still be in the inbox, even if deleted. With particularly large e-mails (20MB+), this can quickly lead to a massive use of RAM, hard drive space, especially if your mail client leaves e-mails on the server (Hamster in this case). If your system only has a small amount of RAM (64MB is considered small in a case such as this), you can very quickly completely lock up your system

· If you use FTP, it is possible to resume downloads if they break off halfway through, with SMTP/POP, this is simply not possible, with e-mail it's all or nothing

This FAQ was answered by Martin Diedrich <martin@mdiedrich.de> with help from:

Wilfried Kramer <whdkramer@nikocity.de>

and Jürgen Denzler <jd@x501.de>

Source: C:\AA\Src20020607\EnHlp\html\faq18l2.htm - (142)


How can I see what happens in Hamster?

How can I see what happens in Hamster?

Translated by Lawrence Mitchell

The first thing to do is to turn on all messages in Hamster itself, this is done in the menu-item "Configuration / General Settings / Logfile/messages", be warned that if you turn on Debug Hamster will generate a lot of data.

If you're using a script, call trace(1) before the part of the script you want to debug, doing this ensures that all script commands are shown in Hamster. To switch this off, call trace(0). To show the current contents of all of a script's variables, call Dump.

Source: C:\AA\Src20020607\EnHlp\html\faq18l3.htm - (143)


Where can I get help if I'm stuck?

Where can I get help if I'm stuck?

Translated by Lawrence Mitchell

If this help file doesn't give sufficient information to help you solve your problem(s), there are a number of Hamster mailing-lists and/or newsgroups that you can use.

The English mailing-list is reachable at <ehamster@yahoogroups.com>, to subscribe, send a message to <ehamster-subscribe@yahoogroups.com>.

There are three English hamster newsgroups, all in the hamster.* hierarchy, they are:

hamster.en.config: for configuration questions.

hamster.en.scripts: for help with Hamster-scripts.

hamster.en.misc: for miscellaneous questions that don't fit in either of the above categories.

These groups/mailing-list are read by Hamster's programmers and by many experienced users who are likely to be able to answer most questions. Please note, however, that in order to receive a useful answer, you need to provide information related to your question. If you ask a question like "Hamster doesn't work for me, can you help?", it is unlikely that anyone will be able to help. Therefore, please attempt to phrase your questions as precisely as possible, whilst also giving relevant config information. In this way you will avoid people having to ask for these things. The following is intended to be a guide as to the type of information to include when asking a question.

· The version of Hamster that you are using, see Help / About.

· The version of Windows that you are using.

· The relevant part of the logfile that shows your problem.

· If you are having problems connecting to Hamster with a client, a copy of the file IPAccess.hst.

· If you are having problems downloading e-mails, a copy of the file MailFilt.hst.

· If you are having problems downloading news, a copy of the file Scores.hst.

· If you are having problems with a script, a copy of the relevant script.

Source: C:\AA\Src20020607\EnHlp\html\faq18l4.htm - (144)


Hamster and Events

Hamster Event FAQ of Jan Schulz

Translated by ANT-ilic

General

Events can be used to inform of some other processes (e.g., other running Scripts). Events can be used in several programs, they don't exist only inside hamster, but Windows-wide. A Hamster-script can wait, for example, for an Event which becomes, for example, from the RAS network released, or also from the second hamster's instance.

A process can wait in each case only for one Event (either the process waits, or he continues running; no more commands will be executed until the Event). Different Script's represent different processes, so if you need more than one waits for Events it's best to run Scripts through runscript(). It can not be done through putting code in the Sub-routines!

Why While (TRUE) loops?

A While (TRUE) causes that the following loop is executed again (the condition is always "true"). Without this a script will wait for Event only once and then exit. So after the following commands the process will start again from the beginning.

Some examples:

Mainscript.hsc

#!hs2
# [...]

runscript( "AdminMails.hsc", "", false)

# This Script executes through runscript() in a separate process, which waits for Event.
# [more commands]

AdminMails.hsc

#!hs2
while(True)

    # Here the Hamster waits for Event "Mail arrived"

    EventWait(GetProcessIdentifier+"_mailin",60000)

    # This Event fetches container Names from the function
    # 'GetProcessIdentifier' and the string '_mailin'
    # is generated by the Hamster and set to 'One', when the Mail
    # *from outside* arrives, or better said is collected from Server.
    # More explanation, how the name is generated and for other internal
    # events of Hamster see below under 'EventWait'.

    # We check if the message is indeed for the Admin
    # because the Hamster's Event did not specified
    # the name of a account.

    if FileExists( HamMailPath+"admin" )

    # We are only innterested in Mails for Admin
       MsgBox("A mail for Admin is arrived")
    endif
endwhile

# Through While command we now wait for the next Event to happen.

With the following the Hamster starts getting mail as soon as the connection is established.

The Script is always started through the "Main script" with the runscript("WaitForConnection.hsc", "", false) command.

WaitForConnection.hsc

#!hs2
While(true)
   EventWait(GetProcessIdentifier+"_rasconnected")

   # Waits that the Hamster's self-defined Event
   # 'GetProcessIdentifier+"_rasconnected"' is set to "One",
   # also that an 'Online connection' is created.

   # Here you can put commands for fetching mail/news
   # and/or call the corresponding SubRoutines

endwhile

Own Events

One can use own Events to communicate with other hamsters or other programs. Because Events "can be seen" Windows-wide, other programs can wait for them and then implement corresponding actions.

Own Events can be created with '$handle = EventCreate( <name> )' and later destroyed with 'Eventclose($handle)'. The Variable '$handle' contains the Memory-address for the Events and is only important for destroying the Event. <name> is the name of the Event under which the Event can be accessed system-wide. When naming an Event you should take care that the name is not used by another program. For the "uniqueness" of the name you should use the Mutex String with command 'GetProcessIdentifier'. For the communication with another program, like in the example below, this is not really necessary because these are for both programs differently.

With the commands 'EventSet( <eventname> )', 'EventReset( <eventname>)' and 'EventPulse( <eventname>)' you can set the status of Events, or change current Event status.

With 'EventWait( <eventname> )' will be waited for the status 'One' (You can not wait for 'Out').

Why If conditions?

When using Eventwait(), as well as the commands changing the Event one should set If condition which reacts if the Event does not yet exist (= return value != 0). With a defined time-out in 'Eventwait()' one should also test for the return value '258' which indicates Timeout. Examples:

#!hs2
varset( $a, Eventwait( "test", 180000 ))

If( $a != 0)
  if($a = 258 )
    warning( "Event is not released after 180 seconds." )
  else
    Warning( "Event not found" )
  endif
else
  warning( "Event has been created, put corresponding commands here... ")
  # commands
endif

With cases without time-out the following sample script is sufficient:

#!hs2
if(eventpulse( "Test" ) != 0
  warning( 'Event not found!')
endif

Examples of command use

If one has set two hamsters to run (One as a normal 'Pullhamster' and one as a 'archive hamster'), then one can balance the second hamster with the following Script:

Archivhamster.hsc (runs on the archive hamster ...)

#!hs2
var($handle, $Error)
$handle=EventCreate ("synchronize", True, False, $Error)

# We open the Event with the following Property:
# 'true' -> after an interrogation of the condition "1"
# it becomes automatically reset.
# 'false' -> the Event receives the condition 'Off'.

# If the Event already exist, Windows announces error message, which
# value is set in the variable $Error. See in addition 'Win32 system messages'.
# However, the Event itself is not changed, so this should not interfere in most cases.

while(True)

    EventWait("synchronize")

    # Now the archive hamster waits for requests to him from anybody
    # in order to synchronize, also waits that the Event 'synchronize'
    # is set to 'One'.

    # Put here the commands necessary to synchronize it with the normal 'Pullhamster'.

endwhile

# Keeps waiting for the hamster to issue the Events again.

EventClose($handle)

# This is actually unnecessary, because the Script never exits
# the while(true)-loop, because the condition is always true.

Pullhamster.hsc (runs on the Pullhamster ...)

#!hs2

# Put here the commands for the normal news fetch, etc...

hamwaitidle

if(eventset( "synchronize" ) != 0)
   Warning( "Event doesn't yet exist! The second hamster is not yet started.")
   Warning( "Opens Event and sets it to 'One'...")
   Eventcreate( "synchronize", True, True) # the first 'True' makes an 'Eventreset() in the archive-hamster unnecessary.
Endif

# The hamster waits, since he has fetched all news, etc
# and then sets the Event 'synchronize' to "One".
# If it does not yet exist it is created.
# For this the If part is important.
# 'Eventset()' use is preferred over 'Eventpulse()', because with it, by later
# interrogation also the second hamster knows if he has to do something.
# With 'Eventpulse()' he would 'miss' this.

# Now the 'archive hamster' would start with his synchronization command
# and after that go to the beginning, and wait again.

Source: C:\AA\Src20020607\EnHlp\html\faq18mo.htm - (145)


Hamster and Netscape

Hamster and Netscape

Translated by Lawrence Mitchell

I always need to enter my name/password when using Netscape for news, how do I change this?

Netscape does not allow you to save a username/password for a newsserver, only for mail (this also happens with other programs).

To avoid having to type in your username and password every time you use Netscape, you can set up a special account in Hamster, whose settings are used for newsreaders which do not send "authinfo". The account for Hamster is called "nntpdefault", and must be set up with the password "*". This account should not be able to send mail, nor should it have a mailbox (see local users).

If you set up this account, note that it in theory allows access to Hamster's newsserver to any computer that can connect to your computer. Because of this, you need to edit the file IPAccess.hst to control which computers are allowed to access Hamster. If your newsreader can save username/password, you shouldn't create the nntpdefault account in the first place.

Source: C:\AA\Src20020607\EnHlp\html\faq18mp.htm - (146)


Password FAQ

Why have my passwords suddenly stopped working?

Translated by Lawrence Mitchell

Passwords are encrypted by Hamster using the "Blowfish" algorithm when they are saved to disk. The standard setting is to add a few extra safeguards to this, such as the name of the computer, OS version and Windows username=login-name.

If you have to change your Window login-name, or if you install new hard/software, Hamster will not be able to read the password file any more. If this occurs, you have to re-enter all the passwords. Should it occur that the same installation of Hamster has to be used by people with different login-names on the same computer, you have to reduce the encryption level for the password file, so that the Windows login-names are not used in the encoding. To do this, select the menu-item "Configuration / Accounts & Passwords", then select the tab "Passwords". Next to "Encryption Base", select "Use only system-infos (OS, Computer)". After you have done this, you need to re-enter all passwords (including the user- and server passwords).

If you are running Windows NT, you can install Hamster to start as a service, it will then run regardless of which user if currently logged in. See <URL:http://home.t-online.de/home/micha-wr/hamster/tools.htm#hamsvc> (German page).

If Hamster is used on a number of different OSes, you need to set the "Encryption Base" to "No use of System infos, User or so". Again, once you have done this, you need to re-enter all passwords.

Important!

If you don't use any system information in encryption at all, anyone who can get a copy of the file Password.!!! can use it, in conjunction with their copy of Hamster, to access all the user accounts you have set up (e.g POP3 mailboxes, etc...).

Source: C:\AA\Src20020607\EnHlp\html\faq18mq.htm - (147)


Articles reload FAQ

How can I load old articles in a newly subscribed newsgroup?

Translated by Lawrence Mitchell

In its default setting, Hamster loads the newest 100 articles in a newly subscribed newsgroup. You can set this value in the menu "Configuration / News: server, groups, pulls ...", select the tab "Settings". The two settings of interest to us are "Pull-Limit (default):" and "Pull-Limit (empty group):". To change to number of articles pulled in a newly-subscribed group, select "Pull only the xxx newest" and then type in a number, e.g. 100 if you want to pull the 100 newest articles. The same applies for already subscribed groups, only here you have to set the value next to "Pull-Limit (default);". However, here you want to set the value to Pull only the xxx oldest, this has the effect that Hamster will always pull the xxx oldest articles in subscribed groups which are newer than those it already has.

As an example, consider the newsserver news.serv.er, which has articles 0815 to 4000 in the newsgroup hamster.en.misc. Articles 1 to 0814 don't exist on the server news.serv.er (they're expired). We have just subscribed to hamster.en.misc in Hamster, and want to pull news. It finds out what articles are available and then pulls the 100 newest, i.e. articles 3901 to 4000. A few days later, we come to pull news again. However, now there are newer articles available, up to article number 4600, Hamster now pulls the 100 oldest articles which are still newer than those it has already pulled, in this case articles 4001 to 4100, the next time Hamster pulls news, it will pull articles 4101 to 4200 and so on.

These settings are saved on a pre-group basis in the file data.ini located in the directory $hamsterroot\Groups\$groupname. To edit these, close Hamster, then open the file data.ini in a text editor. It should look something like this:

[Info]
Created=20010815201325
Description=
LastClientRead=20010903165031

[Setup]
feedonly=0
type=y
purge.articles.keepdays=50

[Ranges]
news.serv.er.Min=39100
news.serv.er.Max=40148
news.serv.er.Low=39804
Local.Max=340
news.serv.er.FirstPullDone=1
Local.Min=1

The bit that we are interested in is:

[Ranges]
news.serv.er.Min=39100
news.serv.er.Max=40148

The next time Hamster pulls news, it will pull articles starting with the number news.serv.er.Min, in this case article number 39100. If you want to reload older articles, you just need to reduce the value of news.serv.er.Min. For example, if you want to pull the previous 1000 older articles, you would enter news.serv.er.Min=38100. Hamster will not pull existing articles again, as it keeps a record in its history of which articles it has already pulled.

Source: C:\AA\Src20020607\EnHlp\html\faq18mr.htm - (148)


Schedule FAQ

How do I setup Hamster to automatically send and retrieve mail and news at regular intervals?

Translated by Obbe-Jan Bakker

Translated from German text of: Daniel Srostlik

The following Script makes Hamster send and retrieve news and mail at regular intervals.

To use this Script, open Hamster and choose in the menu "Script" the entry "Manage scripts and modules...", then tab "Scripts", choose "New". Give the Script a name and copy in the opening editor's window everything what stands between "### begin script ###" and "### end script ###". The Script must be still adapted to their(her) configuration, they read through in addition the notes farther below. So that the Script starts at the start of the hamster, can be suspended the Scriptname to the command's line. If the Script "MailNews.hsc" is called, it looks therefore so:

hamster.exe MailNews.hsc

For each command, further information can be found in the helpfile, enter the name of the command under "index".

Other scripts can be found in the Scriptarchive of Michael Gebert under following address: http://home.t-online.de/home/micha-wr/hamster/index.htm

### begin script ###

#!hs2

### Variable definition ###
var( $Dial )
varset( $connected, 0 )
varset( $try, 0 )

### Settings ###
$Dial = 1                                              #[1]

### Scheduler ###
AtAdd( Mail1, "07:00", "19:00", "1111111", 30, true )  #[2]
AtAdd( Mail2, "07:00", "19:00", "1111111", 15, true )
AtAdd( News1, "07:00", "19:00", "1111111", 60, true )
AtAdd( News2, "07:00", "19:00", "1111111", 15, true )

AtExecute

quit

### Subroutines ###
sub Mail1
 if( $Dial = 1 )
   Dial-routine
   if( $try >= 3 )
     return
   endif
 endif
 HamWaitIdle
 HamMessage( 4, 0 )                                    #[5]
 HamMessage( 5, 0 )                                    #[5]

 HamWaitIdle
 HamMailExchange                                       #[3]
 HamWaitIdle
 HamMessage( 4, 1 )                                    #[5]
 HamMessage( 5, 1 )                                    #[5]
 if( $connected = 1 )
   HamRasHangup
   $connected = 0
 endif
endsub

sub News1
 if( $Dial = 1 )
   dial-routine
   if( $try >= 3 )
     return
   endif
 endif
 HamWaitIdle
 HamMessage( 3, 0 )                                    #[6]
 HamNewsJobsClear
 HamNewsJobsPostDef
 HamNewsJobsPullDef
 HamNewsJobsStart

 HamWaitIdle
 HamMessage( 3, 1 )                                    #[6]
 if( $connected = 1 )
   HamRasHangup
   $connected = 0
 endif
endsub

sub Mail2
 if( HamGetStatus( 3, 7 ) > 0 )
   Mail1
 endif
endsub

sub News2
 if( HamGetStatus( 3, 5 ) > 0 )
   News1
 endif
endsub

sub Dial-routine
 $try = 1
 if( !RasIsConnected )
   $connected = 1
   while( HamRasDial("Provider","$1") != 0 )           #[4]
     if( $try >= 3 )
       $connected = 0
       warning( "Dial in failed")
       return
     endif
     inc( $try )
     sleep( 10000 )
   endwhile
 endif
endsub

### end script ###

[1] the value of the variable "$Dial" determines whether the hamster should construct a RAS-connection or. If as a value a 1 be registered, the hamster tests whether already a RAS-connection exists and if that is not the case, a dial-in connection will be made. (See to this also [4]) if one has for example a dedicated line and therefore no RAS-connection must be made, set the value to "0".

[2] the first "AtAdd" line instructs Hamster to process the subroutine "Mail1" every day from Monday to Sunday, between 7.00 and 19.00 o'clock every 30 minutes. If you would like, that the hamster exchanges e.g. only mails, then prefix the last 2 "AtAdd" lines with a # so that Hamster ignores these lines. The individual Subroutines have the following tasks:

MAIL1: receive and send e-mails for all in the menu "Configuration | Mail: settings & server... | POP3/SMTP-Mailserver" registered POP3 and SMTP-server (see also [3])

MAIL2: checks whether there are e-mails to be send and if that is the case, starts the subroutine Mails1

NEWS1: send and receive articles for all in the menu "Configuration | News: server, groups, pulls..." registered Newsserver and groups

NEWS2: checks whether there are news-articles to be send and if that is the case, starts the subroutine News1

Note: the intervals indicated in the Script, with which the hamster executes the News- and mail exchange, are perfectly sufficient. Because it does not concern in News and mail real time communication, shorter interval times are unnecessary, and only cause excessive load on the News- and mail-server and are not seen gladly by the server-administrators.

[3] To use the command "HamMailExchange" the POP3 and SMTP-server must be registered in Hamster menu "Configuration | Mail: settings & server... | POP3/SMTP-Mailserver".

If E-Mails should be sent to different SMTP servers depending on the sender, then the command "HamMailExchange" must be replaced. Reset this line and set it instead to the following (depending on your configuration, here as example of an user's account with GMX and Web.de):

HamFetchMail( "pop.web.de" )
HamFetchMail( "pop.gmx.net" )
HamWaitIdle( 20000 )
HamSendMail( "smtp.web.de","smtp","User1@web\.de" )
HamSendMail( "mail.gmx.net","smtp","User2@gmx\.de" )

If the SMTP-server requires a login with SMTP-Auth (authorization) , you use the command "HamSendMailAuth" instead of "HamSendMail". For our example, the lines would look therefore:

HamSendMailAuth( "smtp.web.de","smtp","$2","","User1@web\.de" )
HamSendMailAuth( "mail.gmx.net","smtp","$3","","User2@gmx\.de" )

The variables "$2" und "$3" are placeholders for the registered username/password combinations.

So there is no need to write these values in clear text into the script itself.

These variables/values must be defined in the menu "Configuration | Accounts & passwords... | tab: Passwords".

Note: To get the command "HamSendMailAuth" to function, for the corresponding SMTP-servers in the menu "Configuration | Mail: settings & server... | SMTP-Mailserver | Settings" the "SMTP-Auth" must also be marked.

[4] The command "HamRasDial" builds up a designated RAS-connection with the <Provider> with the under the variable "$1" defined user name/password combination. Replace provider with the name of your RAS-network connection as defined under "work place" -> "RAS-network" (phonebook of the RAS network) defined (note: case-sensitive). You define the variable "$1" in the menu "Configuration | Accounts & passwords... | tab: Passwords"

[5] The commands "HamMessage( 4, 0 )" resp. "HamMessage( 5, 0 )" stops the internal POP3- resp. SMTP-server, with commands "HamMessage( 4, 1 )" resp. "HamMessage( 5, 1 )" they are again started. This is safer, if you process/revise outgoing mail before the sending resp. incoming mail after retrieving. If you are sure you do not need to temporarily disconnect the internal POP3- resp. SMTP-server, then place a # before each line marked with "#[5]".

[6] The command "HamMessage( 3, 0 )" stops the internal NNTP-server, with command "HamMessage( 3, 1 )" it starts again. This is safer, if you process/revise outgoing articles before the sending resp incoming articles after retrieving (e.g. with KorrNews and Copyif). If you are sure you do not need to temporarily disconnect the internal NNTP-server, then place a # before each line marked with "#[6]".

Source: C:\AA\Src20020607\EnHlp\html\faq18ms.htm - (149)


Internal.misc FAQ

Why can't the group internal.misc be deleted?

Translated by ANT-ilic

Even if in hamster.ini the entry 'internalgroup.default' is missing, the 'internal.misc' is used as a default group and is not erasable. Only if this entry is manually changed to another existing group, the group 'internal.misc' can be deleted.

Source: C:\AA\Src20020607\EnHlp\html\faq18mt.htm - (150)


Feeder FAQ

"Feeding" newsgroups with Hamster.

Translated by ANT-ilic

0. Intro:

The one who wants to use hamster as a Feeder, should possess advanced knowledge about the NNTP protocol and the way Usenet functions. Without this knowledge one is on a good path to get in a lot of trouble, which can happen with this technology.

1. Basic requirements:

If the hamster is used as a Feeder or articles from another server should be fed to the hamster, he should be used exclusively for this purpose. You should not use tools for the posttreatment of articles. It is required that, in order to use the hamster as a local Feeder, Hamster has its own Domain name. The computer name followed with the Domain name (FQDN) (e.g., hamster.your-domain.de) should be set in the menu Configuration -> Local Server... -> tab: General. After that in menu Configuration -> Local Server... -> NNTP enable the options "Post new articles directly into the local database", "Generate Message-ID" and "Generate or expand Path-Header". "Generate "X-Posting-Agent"-Header" and "Generate or expand "User-agent"-Header " should be deactivated. The activation of the additional X-Trace:Header through news.addxhtrace=X-Trace in the section [Setup] of the Hamster.ini is recommended for tracing spam.

Warning: the Feed of articles without correct Path: Header or with missing or faulty Message-ID: Header can cause nasty troubles in the net.

2. Feed of the hamster to the local server:

To permit the Feed from the hamster to a user, the corresponding check box is to be activated in the Settings of the local user. With the option ihave.auth=1 in the section the Hamster.ini the general permission can be given for all users of the hamster to use peering. The hamster can be used with the NNTP command IHAVE as well as with feeder command TAKETHIS. The hamster stores details of the articles sent by the News clients, by default, in the local server (directory news.Out). However, with the option "Feeder only" in the Settings dialog of the respective group this can be prevented, so that the articles are stored only locally, after the activating the option "Post new articles directly into the local database" (local injection). In this case the articles details in the directory for outgoing new of local server, and are not send through the provider and they are only available in Hamster, if Hamster itself is another servers feeder. Furthermore it is recommended to set the limit for the number of the lines and byte of one article in the Hamster.ini. Even more, the variables local.limit.linelen.nntp and local.limit.textsize.nntp can be put in the section [Setup]. A too small value can cause problems with binary file attachments and big articles and a too large value makes your server vulnerable to large floods of garbage.

3. Feed other servers with the hamster:

Feeding another server can be done with the hs2-command:

HamNewsJobsFeed( <server>, <group-select> )

A corresponding job is put into the news-queue with the command

HamNewsJobsStart( <server-list>)

start's processing the job queue. The server which is being Fed must be created in the menu ”Configuration” -> ”News: server, groups, pulls...” -> ”Newsserver”. All articles from the respective groups are fed from the hamster's database. No articles from the folder News.out are transported in this way. Every article is offered to the Peer only once by means of IHAVE-commands. The hamster marks which articles are offered to the specified server.

4. More answers:

Which servers may I address with HamNewsJobsFeed?

Every RFC 977 conpatible servers is already peering with You. The hamster also supports original Authinfo for peering which is described in RFC 2980. You can use of course also the second hamster, e.g., your archive hamster, as a Peer.

Can I use a leased line?

This depends on the demands which your Peering partner places to you. Some providers are not able or willing to accept time-shifted feeds.

Is there a test server I can feed without bothering the net?

Use a second hamster or setup a DNEWS or INN in order to test. (INN:http://www.isc.org/products/INN/ DNews:http://netwinsite.com/). Remember to use different domain-names for the testserver and the 'real feed' server.

Which providers are ready to feed my Hamster?

Speak to your local provider. Many providers place rather different demands for Peering partner. Usually it is expected that You possess a fixed IP address and use a leased line, because a time-shifted feed is not possible.

Does feed give me a clean Feed or are there filter capabilities?

Up to now not yet. But You may gladly think of a way to do this with a hs2-Script.

Source: C:\AA\Src20020607\EnHlp\html\faq18mu.htm - (151)


Mail distributor and company network FAQ

Can hamster do the mail distribution in a company network?

Translated by Heiko Studt

Yes. Hamster can collect external and internal mails for different users/accounts in smaller and middle teams. We recommend that you probe your installation with test-accounts before. Detailed knowledge about Hamster, its script- and filter- possibilities and network-stuff is generally required for the production use of Hamster. You shouldn't make use of developer-versions (Future implementations and Beta-Hamsters)!

Source: C:\AA\Src20020607\EnHlp\html\faq18mv.htm - (152)


Convert mailing-lists into newsgroups FAQ

Convert mailing-lists into newsgroups

Translated by ANT-ilic

From Wilfried Kramer, see also http://home.nexgo.de/whdk/hamster/#ML2NG

This config uses the newer Hamster's Script-language for fetching of the mails, as well as Korrnews for additional steps. The mails for the list are diverted first once in a special local mail Account by the name as the "list". Afterwards messages are reworked there with Korrnews and needless Headers are deleted. Errors of Egroups are corrected, and the advertisement's are disposed off. I have caught this special tip naturally somewhere in hamster/de/*. The hamster fetches to himself these revised mails again and they are really diverted then.

But now it goes off:

1. Local user is put into the name list. This Account should never get pulled by Client.

2. Next, add both filters in the section [EGroups] in the "Mailfilt.hst", as below:

  [EGroups]
  # filter-rules for all mails fetched with identifier "EGroups"
  add(liste)                       Reply-To: "usehamsternet@"
  add(liste)                       Reply-To: "dafa-treff@"

  [EGListe]
  postto(hamster.de.usehamsternet) Reply-To: "usehamsternet@"
  postto(dafa.treff)               Reply-To: "dafa-treff@"

As you can see, currently I cover two lists. You should notice here especially that in both sections the filter criteria are identical. Here it is in each case the "Reply-To:", this can also be the Subject or other identifiers in some specific case. Naturally it is advisable to use an Account only for the mailing lists. However this is not absolutely necessary.

3. For Korrnews create a special file, with name "EGroupsHeader.def" and contents:

  Delete Header Received
  Delete Header Newsgroups
  Delete Header Return-Path
  Delete Header Delivered-To
  Delete Header X-eGroups-Return
  Delete Header X-Apparently-To
  Delete Header X-From_:
  Delete Header X-Hamster-To
  Delete Header Mailing-List
  Delete Header Precedence
  Delete Header List-Unsubscribe

  If not Header(X-eGroups-From) is Empty
    Set Header X-EG-From: %Header(From)%
    Set Header From: %Header(X-eGroups-From)%
    Delete Header X-eGroups-From
  endif

  If Header(References) is Empty and not Header(In-Reply-To) is Empty
    Set Header References: %Header(References)% %Header(In-Reply-To)%
  endif

  Delete between last "^-+ eGroups Sponsor -+~-~>$","^-+_->$",true

This data deletes a lot of needless Headers, does magic if its necessary that the original From:-Header of the sender again on exit, generate References from an existing in-Reply-To: and finally cleun up the advertisement.

Create) in addition a corresponding section "EGroups" in Korrnews which applies this file. In addition register the directory for the account list.

  [EGroups]
  MessagePath=..\Mails\Liste
  Header.def=EGroupsHeader.def

4. In the Script by using HamFetchMail you collect mail from the external Email-account to which the subscribed mailing list arrives:

'hamfetchmail ( "pop.serv.er", "pop3", "User", "Pass", "admin", "EGroups" )'

The mails are filtered with the first filter from above in the Account "list".

5. After all other actions the connection with the provider can be disconnected, because the rest runs off locally.

  hamwaitidle
  Execute ("KorrNews\KorrNews.EXE EGroups", HamPath,0,true)

This section waits that the hamster finishes all his work. All interesting mails are ceartainly available separately in the Account list. The improvements are carried out, as indicated at the top. There is only no import to the local NG.

6. The next section does this. Hamster fetches the mail from local account of the mail server (Hamster is actually a mailserver, too). This means that the Hamster POPs himself. This is when the second filter criteria is matched, so that the mails are imported.

  hamwaitidle
  hamfetchmail ( "localhost", "pop3", "liste", "liste", "admin", "EGListe" )
  hamwaitidle

Here is a little bit improvement-worthy ideas: "postto(...)" does not pay attention to the History. Therefore, articles can appear repeatedly if they are often recalled correspondingly. There should be a command which reads the separate files, and examines whether the MID already stands in the History. If that is the case, the file should be deleted. Only afterwards the rest should be imported.

Advantages: If one more time a generally accessible server offers to a local group (e.g., the group from Roland), can be recalled unconcernedly first of all from there. Then the special measure avoids doublures in the group. Unless, the mail was taken with Egroups without MID. But this becomes much more improbable, the more readers answer directly with the Newsreader.

Source: C:\AA\Src20020607\EnHlp\html\faq18mw.htm - (153)


Two hamsters FAQ

Can I use two hamsters?

Translated by ANT-ilic

From Adreas Heim:

Yes! Stay with me from the beginning in this cast. The Hamster1 is the one who goes to the net and pulls everything. At the same time he serves as news archive. (At the moment 18/07/2000 he holds more than 100 groups with over 240.000 articles in his(its) baking(cheeks).

Then there is the Hamster2. He fetches the news of Hamster1 and keeps them for only a week in his database.

Detail of the settings for two hamsters:

Hamster 1 NNTP Port on 1119.

In hamster 2 for the server set also Port 1119.

This is what we already have already.

        XNews               Hamster 2           Hamster 1            server
    +---------+           +----------+         +---------+        +-----------+
    |    NNTP |---------->| 119 1119 |-------->|1119 NNTP|------->|   NNTP    |
    +---------+           +----------+         +---------+        +-----------+

NNTP = default Port 119

Why all of this?

First for the experiment with hamster (options, Scripts and other tests). test).

Then also from Performance-perspective. My Newsreader takes much longer to load with a lot of articles.

Source: C:\AA\Src20020607\EnHlp\html\faq18mx.htm - (154)


LAN hamster FAQ

I can access LAN but not the Hamster?

Translated by ANT-ilic

From Andreas Heim:

If Hamster will be accessed from another computer, you must indicate in the Client-application (Newsreader, mail program) the address of the computer on which the Hamster runs. (The mistake often made here is to indicate address 127.0.0.1=localhost).

For this you can use also add an entry in the hosts file:

E.g.

192.168.0.1      news.hamster
192.168.0.1      pop.hamster

Then in the Newsreader, e.g., you should indicate only "news.hamster" as a server.

In Hamster likewise for every server (e.g. POP, SMTP, RECO) the IP of the computer must be "permitted". There are three ways to accomplish this:

· 127.0.0.1 (localhost) indicates, that only the same computer can access the Hamster. (So no access from the LAN). This is the default setting.

· The IP of the computer e.g. 192.168.0.1 indicates, all computers who have access to this IP in the LAN can use the server of Hamster. This is the adviced setting for Hamster in a LAN.

· The IP 0.0.0.0 indicates that the Hamster can be accessed from everywhere. Before using this setting be sure to inform yourself very thoroughly about the severe security-consequences!

You should also pay attention to the IP addresses. With default settings, hamster can only manage the addresses 192.168.0.0-192.168.255.255. If only these are used in the LAN, it should already work. If other IP addresses are used then these must first be set manually in the file IPAccess.hst.

Source: C:\AA\Src20020607\EnHlp\html\faq18og.htm - (155)


Multiple mailbox FAQ

How I can access several accounts (mailboxes) with the same provider (ISP)?

Translated by ANT-ilic, updated by Obbe-Jan Bakker

From Andreas Heim

You can create multiple POP servers with the same name.

The format for the entry of a server is the following:

Servername[/Alias][,Port]

With the alias multiple server with the same name can be used. The alias parameter represents an arbitrary text, for example a number:

pop.1and1.com/1
pop.1and1.com/2
pop.1and1.com/3

Hereby every server has its own settings (settings for user/password etc.)

An example for use in script is:

HamFetchMail(pop.1and1.com/2)

An other solution handles all within the script

The command for this is: (Hamsterscript hs2)

HamFetchMail( <server>, <port>, <user>, <pass>, <destuser>, <filter> )

E.g.

HamFetchMail( "pop.puretec.de","pop3","$1","","hamster","lists" ) # Hamster-Lists
HamFetchMail( "pop.puretec.de","pop3","$2","","post","onlynews" ) # onlynews
HamFetchMail( "pop.puretec.de","pop3","$3","","post","news" ) # news

Hereby there is no need to define the pop-server in Hamster. The $1... are placeholders for username and password and can be set within Hamster.

The command HamFetchMail has several other optional parameters for more advanced use. See the description of HamFetchMail itself for details.

An other quick and dirty solution is using the Windows "hosts" file.

A simple but not quite clean solution is to give the IP of the provider's POP server a second name in the hosts file. E.g., server for provider is pop.provider.de, with the IP 195.182.114.35 then in the hosts insert the following entry "195.182.114.35 pop.provider.two". (You can find the IP by pinging the pop.provider.de) Then, in the hamster, you put once a server pop.provider.de and once pop.provider.two. Then you can assign to each of entries own user and own Password. If the IP is changed occasionally or is just obtainable through server this does not work.

(The "larger" providers usually have several IP's behind a server name address).

Source: C:\AA\Src20020607\EnHlp\html\faq18oh.htm - (156)


FQDN FAQ

Hamster and FQDN

Translated by ANT-ilic

From Dirk Primbs (German original text)

FQDN stands for Fully Qualified Domain Name and represents the ideal case of the name dissolution on TCP/IP based networks. By definition he identifies accurately a computer on the network. FQDN's are given away by Internic or also from DeNic. I would like to limit myself here to the for hamster and Usenet relevant part of the definition.

When I wanted to configure a Newsreader for the first time I noticed that my articles and answers to them are different, and then I bumped onto this abbreviation and was quite confused at first about its importance(meaning). But everything is quite simple actually:

So that a news server can keep track of News-posts, he uses so-called Message-ID's. These must be uniquely defined in the whole Usenet for the period of at least two years, because, otherwise, undesirable effects could appear like overwritten articles etc. These Message-ID's can be produced in different ways. In the dominant majority of the cases the first news server that receives the message takes over the production of the Message-ID's. He does this always automatically when he receives a Message without Message-ID, so that many conservative News-Clients can handle messages.

Of course, also the News-clients can produce partial Message-ID's. But is not guaranteed that they will always do this properly (e.g., Netscape Messenger does it in such way that there are lots of flaws). A short research or a Header-inquiry in a Newsgroup like de.newusers.infos would be helpful, before one enters the Usenet-community :-)

Does this gives us possibilities to guarantee the uniqueness of the Message-ID? Yes. The FQDN comes in the game just here. How I wrote at the beginning, you first have to get the FQDN from InterNic or DENic. SUCH a FQDN is, e.g., primbs.de.

The part before primbs.de, also in case of my web side "www" marks the computer which should be addressed accurately and can be defined by the owner the FQDN (in this case from me) freely. For our Newsclient/server this means: It's not a mistake to use any prefix (e.g., news) before my FQDN and use the name resulting from it for my News-posts. I entered news.primbs.de in the corresponding configuration field of my hamster and voila .... my hamster produces valid unique Message-ID's.

Alternatively (If you can't or don't want to reserve your own domain with DENIC) you yourself can also use confident FQDN in <http://news.cis.dfn.de>. There you receive free of charge access to an exceptional newsserver, also the FQDN with pattern like this ID-1234567.user.cisdfn.de.

Furthermore you can get FQDN's from Thomas Hochstein free of charge. See here for info:

http://sites.inka.de/ancalagon/fqdn/fqdn.html

Source: C:\AA\Src20020607\EnHlp\html\faq18oi.htm - (157)


Security

Hamster and security

Translated by Lawrence Mitchell

Perfect safety in networks in which some people have destructive intent cannot and does not exist. Complete safety for a sufficiently complex system is neither technically nor conceptually possible.

What is possible, however, is protection to a greater or lesser level. Before one begins with the technical implementation of such protection, it is necessary to acquaint oneself with some of the problems.

The installation of a so-called "personal firewall" on its own does not bring any security advantages, as it suggests that the user does not need any specialist knowledge (someone who doesn't understand what a program is trying to say, doesn't need it). In fact, for an inexperienced user, it can be argued that "personal firewalls" create more problems than they solve.

Protection can only be provided by a concept (and implementation) which has been adapted to the needs of the user. This concept must take into account the OS, and all hardware/software that is used. In addition, the knowledge of the user regarding the risks of the internet must be taken into account.

Hamster's local servers deserve particular attention in the field of security. Protection of the local servers is necessary so that foreign users cannot use Hamster to post articles, send e-mails (i.e. use your computer as a relay, possibly in spam attacks), or "spy" on data.

In a standard configuration, the local servers use ports 25 for SMTP, 110 for POP3, 143 for IMAP, 23 for Telnet (ReCo) and 119 for NNTP respectively. By default, these ports are bound to the local network interface (NIC) which has the IP address 127.0.0.1 (loopback-adaptor). If you wish, you can change this by adding the following lines to you Hamster.ini in the [Setup] section.

local.nntp.serverbind=127.0.0.1
local.pop3.serverbind=127.0.0.1
local.smtp.serverbind=127.0.0.1
local.imap.serverbind=127.0.0.1
local.reco.serverbind=127.0.0.1

This setting should, however, only be changed if absolutely necessary. If you set $IPADDRESS to 0.0.0.0, you can bind Hamster to all NICs on the computer (if for instance you run a server with two ethernet cards, one connected to an external line, another to a LAN). Be warned, however, that this can leave Hamster open to a Denial of Service (DOS) attack.

In order to protect the local servers from DOS and other attacks, Hamster refuses connections coming from anything other than localhost (IP-address=127.0.0.1) or the IP-block reserved for use by a LAN (192.168.0.0 -- 192.168.255.255). This standard configuration can be changed manually, to do this you need to create a file called IPAccess.hst in Hamster's root directory, see IPAccess.hst for information on this file's syntax.

A second level of protection to guard against incorrect use is provided by Hamster's password system. Even if Hamster is only being used on a one-person workstation, one should make use of this protection. Most News- and Mailreaders are set up that they don't transmit passwords in such a way that they can be intercepted and read. Sometimes password-protection is not implemented for SMTP authorization. If this is the case, or you are not sure, you should set up Hamster to require POP before SMTP authorization.

Passwords for the local server are encrypted using the Blowfish algorithm. This protection should not be switched off unless absolutely necessary. This is not a foolproof way of preventing passwords being cracked, however, it significantly increases the difficulty of cracking the password, if, for example, it is transmitted over the internet. In addition, when choosing passwords, don't use any particularly easy to remember name (e.g. your own first name).

As a third level of protection, local servers ought to be stopped before going online. This can be done through the menu "Local / Start/Stop (NNTP|POP3|SMTP)-server" or with a script using the following hs2 commands.

HamMessage(3, 0)
HamMessage(4, 0)
HamMessage(5, 0)

To make this easier to use, you could integrate it into a script. The following example scripts are from Hendrik Brummermann.

Connection script

####################begin script
#!hs2

#Are there any client connections?

if(HamGetStatus(2, 1)  + HamGetStatus(2, 2) + HamGetStatus(2, 3) > 0)
  error("The server sockets could not be closed because there are still active
client connections.")
  quit
endif

#If there are not, stop the local servers

HamMessage(3, 0)
HamMessage(4, 0)
HamMessage(5, 0)

#Check to see if all sockets have, in fact, been closed.

if(HamGetStatus(1, 1)  + HamGetStatus(1, 2) + HamGetStatus(1, 3) > 0)
  error("At least one server socket could not be closed")
  quit
endif

#If all sockets have been closed, connect to the internet.
#substitute $connection with the name of your internet connection

HamRasDial ("$connection")

quit
####################end script

Disconnection script

####################begin script
#!hs2

#wait until Hamster has finished all tasks
HamWaitIdle

#disconnect from internet

HamRasHangup

#Start local servers
HamMessage(3, 1)
HamMessage(4, 1)
HamMessage(5, 1)

quit
####################end script

These scripts could either be integrated into your existing scripts, or saved in Hamster's script directory, so that they may be executed when needed.

N.B. On the whole, login passwords to external servers are normally transmitted as clear text. For reasons of safety, if your ISP offers secure connections through SSl/TLS and/or APOP you should use it. However, not all ISPs offer these services, and, if you have an option, you should pick one that does.

Source: C:\AA\Src20020607\EnHlp\html\faq18oj.htm - (158)


Network resources

Conserving network resources

Translated by Lawrence Mitchell

This is a translation of an answer by Manual Martin

Why shouldn't I just pull news/mail once a minute with Hamster?

It is in this way that you waste an number of different resources. Firstly, bandwidth. Regardless of the fact that new lines are being laid constantly, bandwidth is a finite resource, and will remain that way. In addition to this, not every server that you connect to is blessed with a good connection. Even when it is, their bandwidth remains finite. A further point, which is often not clear to many, bandwidth and network traffic cost your ISP money (lots of it). The less it has of either, the earlier it will give up. If it isn't making money, this will happen even sooner. If you start to waste bandwidth needlessly, it cannot be used by other network users. The internet only works if all its users show a modicum of sense. Don't forget, that you are "the other person" to the majority of internet users.

Another, far more important, resource is the load (or overload) of servers. You have almost certainly experienced times when certain servers simply won't respond. This is often because they are overloaded, as too many people want to access them at the same time. You (and others) are thus affected by this. If you pull news/mail at short intervals, you represent a constant load for the server. On the whole, you on your own will not be able to overload a server, note, however, that you are not alone. If too many people behave in an irresponsible manner, saturation point is quickly reached. It's particularly bad if you overload free services, such as news.cis.dfn.de in this manner. It would be tragic if Hamster users were to contribute towards making the life of news-admins so difficult that they shut down their services. Although this sounds extreme, it isn't, an example is the following (German) post to usenet, which can be found on Google http://groups.google.com/groups?as_umsgid=serverwatch-24.04.2001@hsr.hda.nethamster.de. A quote from this article follows (translated):

Hello, since the misuse[*] of wuff.inx.de (a semi-open server for the hamster.* hierarchy accessible with a generic user/password system) has recently drastically increased, to the point where the number of complaints and pointers I had to write to users, as well as the time and effort I have to put in for a service which I provide free of charge too high is, I will be closing the open acccess that wuff.inx.de has provided in the next few days.

[...]

[*] It seems to have become modern to connect to a server with x parallel connections 24/7 which are all refreshed automatically every 30 secs to 1 minute. This practice has, since recently, been increasing dramatically.

But now some good news, a responsible news/mail pulling regime is also sensible for you.

Question: How do I pull "well"?

Answer: A few tips, which do not claim to be complete.

-Only pull news shortly before you're going to read it

It doesn't really matter when you pull an article, as long as it happens before you read it :-). Whether or not you pull it a long time in advance makes no difference. It is, therefore, most sensible to pull articles just before reading them. In this way, you have the most recent articles and older ones, and you avoid unnecessary pulls. The same argument can be applied to e-mail, if you want to go down the route of instant messaging, e-mail is not for you.

-If you pull news at certain intervals (e.g. through an automated script), ask yourself why.

If you pull so much news that you can't manage it in one go, a news-feed might be a more sensible option. Among other things, you can save money.

If a news-feed isn't possible, ask yourself if all the pulls you make are absolutely necessary. Do you really need one late at night? Is an all-day pull useful/clever? Could you lengthen the intervals between pulls? Look through your Hamster logs to find out when you could cut out pulls.

Question: How else could I save traffic?

Answer: saving traffic starts when writing articles/e-mail.

-Experienced users avoid unnecessary baggage in articles/e-mails: HTML posts can't be read by everyone, many don't even want to read them. An e-mail becomes approximately 4 times as necessary in HTML. The same applies to pictures and so on. The content (i.e. text) is what is important, not what is used to make it look pretty.

-The same goes for large attachments: it isn't particularly sensible to send large e-mails. The e-mail protocol SMTP sends your e-mail from server to server until it reaches its destination, in sending large attachments, you increase the load on every one of those servers. In addition, the receiver then has to load the file. Furthermore, binary files (e.g. MSWord documents, PDF files, etc...) are encoded so that they arrive at the other end uncorrupted. This encoding increases the size of the file by a factor of 1.3 -- 1.5. In addition, if you take into account that most mailservers are on the slow side, it's pretty clear. Uploading the file to a http/ftp server and sending an address per e-mail is better for all concerned.

-Regarding attachments: avoid using Hamster in binary newsgroups at all cost.

Hamster is not designed for use in binary groups. On the one hand, because Hamster is designed to pull allarticles, on the other because it is designed to do this on a regular basis. Binary groups are pretty pointless anyway. Usenet is a distributed network of servers, which replicate each other's date world-wide so that users can read posts from across the world on "their" server. A post will therefore (out of necessity) be sent back and forth and saved a number of times on different servers. In practice, an analysis of network traffic shows that 97% of Usenet's network load is the result of binary groups. Even in the de.* hierarchy, 50% of traffic comes from one newsgroup (de.alt.dateien.weibsbilder). Taking this into consideration, it's no wonder that there are movements to get rid of binary groups altogether. In the case of individuals users (i.e. you), this boils down to "Please use other methods to distribute files".

Question: What other methods could I use to distribute files?

Answer: the best way of doing this would be to upload files to a password-protected ftp-server and then to send a notification of this per e-mail. Details of where to get ftp-space can be found in the faq of the newsgroup de.comm.provider.webspace (German). Alternatively, you can run a web/ftp-server on your own computer (though only short-term). A very small webserver is available at http://www.analogx.com. A further possibility is instant-messaging software such as ICQ which allows a direct data-exchange, or an IRC-DCC-transfer.

The last two possibilities mentioned have a certain safety risk associated with them, as they start a server on you computer. You should inform yourself about such risks before going ahead with one of these solutions. See for example the FAQ "Hamster and safety".

Source: C:\AA\Src20020607\EnHlp\html\faq18ok.htm - (159)


Rerouting/Forwarding E-Mail

Rerouting/Forwarding E-Mail

Translated by Obbe-Jan Bakker

There are several ways for the directing of mail to different mailboxes in Hamster:

1. <destuser> Parameter in the POP3-Client settings (Through menu or <destuser> in script)

2. <filter> Parameter in the POP3-Client settings (Through menu or <filter> in script)

3. General section in the mail filter [*] with redirection. (addaccounts)

4. Mail-router

Pay attention that the first three redirection-variants do change the receiver on the mailbox name and are only then handed over to the MailRouter.

It is not possible to redirect incoming POP3 mail directly with the MailAlias from the name in the TO:-header to an alternative E-Mail address.

For safety reasons one always must create a mailbox in the hamster configuration, even if it is only a virtual mailbox.

The mail coming in via POP3 is always assigned only to a local mailbox, in case of doubt this will be the admin mailbox, and only then handed over to the Mailrouter. This prevents that incoming mails without an assigned account fall through and land in the Mail.Out outbox.

Who wants an external forwarding of with POP3 incoming mail must for these create a (virtual) account, then redirect the with POP3 incoming mail by MailFilter or POP3-Client-Parameter, and then from this mailbox forward these mails to an external or internal account.

However, for local in SMTP-Server incoming mail it is possible to reroute mail direct from e-mail-address to e-mail-address.

btw.

The log file contains a lot of information if the 'detail' parameter is activated (menu: Configuration | tab:Visual). It can be loaded with too many data, so you can consider to use the separate Thread view.

Source: C:\AA\Src20020607\EnHlp\html\faq18ol.htm - (160)


Outlook FAQ

Hamster and Outlook ™

Translated by ANT-ilic

Outlook XP ™ of the firm Microsoft ™ contains a bug in the SMTP and POP3-Clients which hinders the co-operation with the hamster. To avoid this, the following lines must be added in the file Hamster.ini in the section setup:

pop3.delay=10

smtp.delay=10

imap.delay=1000

These values give(indicate) the delay in milliseconds between receiving a SMTP, POP3 or IMAP command and the answer to it in the respective local server of the hamster. The values above are guidelines. With very fast computers in might be necessary to set higher values.

Source: C:\AA\Src20020607\EnHlp\html\faq18om.htm - (161)


RegEx FAQ

Hamster and Regular Expressions (RegEx)

Translated by Obbe-Jan Bakker

Original German text by Marc Brockschmidt:

Regular expressions

In the files Scores.hst, MailFilt.hst and in some settings of the graphical interface and/or INI files "Regular Expressions" can be used.

Comprehensive information can be found at

http://www.perl.com/CPAN-local/doc/manual/html/pod/perlre.html (This is the Perl documentation for regular expressions)

Or in the book "Mastering Regular Expressions" (O'Reilly & Associates, 1997)

A short English introduction can be found at http://virtual.park.uga.edu/humcomp/perl/regex2a.html

A short German introduction can be found at http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm

A good explanation of the inner workings of Regular Expressions can be found in the manual of Editpad.

The website for this editor is http://www.editpadlite.com/.

Despite the extensive information a short overview of the powerful possibilities of the Regular Expressions is to be given here, as a beginners introduction.

Fields of use

Regular expressions are versatile used, and basic knowledge in this area can prove unexpectedly very useful. Also in the Usenet one is likely to encounter regular expressions frequently, depending upon group more or less - by one simply s/ !!!!/!/ (the explanation follows...) up to most complicated expressions (mostly only for immutability are so complicated!).

The most frequent area of application for regular expressions is with distance Perl ("Practical Extraction and Report Language") - a Scriptlanguage, which above all system administrators of Unix systems and Web authors (so many different fields of application, all server by one language -Information at http://www.perl.org/). Also different Scriptlanguages (Python, Ruby, ...) use Regular Expressions, exactly the same as editors (vi, (X)Emacs, and many advanced Windows editors). And not the least also the hamster can deal with regular expressions, exactly the same as the Tools KorrNews and CopyIf, which offer additional functionality.

Regular expressions are used to find static/variable texts. This happens either in the context of an examination ("If the text contains this, then do that" - the "matching", which returns either "True" or "False", this is used in Hamster) or in the context of a substitution (uninteresting for normal use in Hamster).

What is a regular expression?

In the following, regular expressions are abbreviated with "RE" (of "Regular Expression"), moreover they are surrounded by "/".

With /hello/ an entire RE is formulated, which, if it is used, finds the word "hello" in any text. This means for the Hamster therefore, which he can write out in the simplest case the term, on which e.g. scoring is to done. Some characters must however become "escaped", since they have a special meaning in RE:

Character   |  "Escaped Character"
------------+---------------------
     .      |      \.
     *      |      \*
     +      |      \+
     ?      |      \?
     (      |      \(
     )      |      \)
     \      |      \\

To make certain your RE does not contain unexpected special characters you can "escape" each non-letter character with a preceding backslash "\". This will however decrease the readability of your RE.

Upper and lower case spelling are distinguished in RE.

Possibilities of the RE

The things described up to now are not really spectacular, but the long list of the reserved characters forecasts it already: There is much more.

Quantifier

The simplest examples are the "quantifiers" *, +, ? and {}. They affect the element, which precedes them, which e.g. a letter can be, and describe how many times this element a match must occur.

* Means, preceding element must be found 0 or more times.
  Example: /abc*/ finds among other things "ab", "abc", "abccccc".

+ Means, preceding element must be found 1 or more times.
  Example: /abc+/ finds among other things "abc", "abccccc" but not "ab".

? Means, preceding element must be found 0 or 1 time.
  Example: /abc?/ finds "ab" and "abc", but not "abccccc".

{} exists in several variants:
  - {n} means, preceding element must be found precisely n times.
        Example: /abc{3}/ finds only "abccc".
  - {n,} means, preceding element must be found at least n times.
         Example: /abc{3,}/ finds among other things "abccc", "abccccc", but not "abcc".
  - {n,m} means, preceding element must be found at least n and at most m times.
          Example: /abc{3,4}/ finds among other things "abccc", "abcccc", but not "abcc" or "abccccc".

Note: * is equivalent to {0,}, + is equivalent to {1,} and ? is equivalent to {0,1}

Classes of characters

In the RE there are several pre-defined character classes and the additional option for selfdefined classes. The pre-defined classes can all be attained over "\" (a "backslash") and a letter.

.  Contains all characters, can represent everything.  Example:
   / ... / finds all, what is 3 characters long and surrounded by spaces.

\w contains all alphanumeric characters (A, B ... Z; a, b ... z ..., 1 ... 9 and that underscore).
   Example: /\w{3}/ finds among other things "123" finds, "You" and "A_B".

\W contains all characters that are non-alphanumeric.
   Example: /\W{3}/ finds among other things "///", "---" and "|+|".

\s finds a "whitespace" (space(blank), tab, newline, return).
   Example: /a\sa/ finds among other things "a        a" and "a a".

\S finds all non-"whitespace".
   Example: /\S+\s\S+/ finds among other things "hello you", but not "A_A".

\d finds all numbers (1, 2... 9).
   Example: /\d{3}/ finds all 3-digit numbers.

\D finds all characters that are not numbers.
   Example: /\d-\D+/ finds among other things "3-digits".

Beside these predefined classes, one can define additional character classes.
These are seized in "[ ]" (square brackets), and have some special characteristics.

[ab] means, at this position the character a and/or b can occur.
     Example: /[ab]{3}/ finds: "aaa", "aba", "aab", "abb", "bbb", "baa", "bab", "bba"

[A-Z] means, at this position the characters "A" to "Z" can occur.
      Example: /[A-Z]/ finds each letter between A and Z.

[A-Za-z0-9_] means the same as \w.

Further possibilities

There are still some further possibilities for RE, which are summarized next:

  \b is the boundary between \w and \W (thus a word boundary).  Example:
     /Hall.\b/ finds "Hello sir!", "Hello, ..." but not "Hellogirl".

^    is the beginning of a character string.  Example:
     In the string "hello you hells angel!"  becomes with /^Hel../ only "Hello".

$    is the end of a character string.

Source: C:\AA\Src20020607\EnHlp\html\faq18on.htm - (162)


OE FAQ

Hamster and Outlook Express

Translated by Obbe-Jan Bakker

Original German text by Markus Kohlmeyer:

Last-modified: 2002-03-09
 Posting-frequency: monthly
 Newsgroups: hamster.de.newuser
 Subject: [FAQ] Konfiguration of Outlook-Express
 URL: http://delta2000-online.de/hamster/oe-config.txt
 URL: http://delta2000-online.de/hamster/oe-config.html
 Version: 0.0.5

           Configuration of outlook-express (from version 5.0)
 ======================================================================
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

 Preface:
 ¯¯¯¯¯¯¯¯
 I recommend urgently each outlook-express-User before the using of
 the following configuration aid to read http://oe-faq.de/) thoroughly
 and, as far as it be necessary should, also to adjust settings.

 Requirements:
 ¯¯¯¯¯¯¯¯¯¯¯¯¯
 Windows 95/98/ME/NT4/2000/XP, Outlook-Express from Version 5.0,
 Hamster Classic from Version 1.3.22.0, Korrnews from Version 4.0,
 MorVer from version ??? (unknown, because there is no history included in Morver)

 Comments:
 ¯¯¯¯¯¯¯¯¯¯¯¯
 The settings named in this document deviate partially from the recommendations, which are named in the OE-FAQS.
 The reason for this is that the following settings are necessary or meaningful only for the utilization
 of the OE in connection with the hamster and at least one of both tools, Korrnews or MorVer.
 The necessary options are marked on the left edge with '>'.
 All further settings correspond (almost) to my personal preferences, or to the recommendations of the OE-FAQS.

 Furthermore some options and dialogs are not available in all versions
 or at a different location.
 These differences will be ignored in my further recommendations.

 The shown 'Screenshots' were created with Windows XP Professional
 , Outlook-Express 6.0, Korrnews 4.11, MorVer 1.0.303 and the current
 beta version of hamster Classic 1.3.23.130.

 The configuration files as used by me can be seen (regard these as example-files)
 at the following URLs:
 Hamster.ini    (http://delta2000-online.de/hamster/hamster.ini.html)
 Korrnews.ini   (http://delta2000-online.de/hamster/korrnews.ini.html)
 BoxQuotes.ini  (http://delta2000-online.de/hamster/boxquotes.ini.html)
 Footnotes.ini  (http://delta2000-online.de/hamster/footnotes.ini.html)
 Specials.ini   (http://delta2000-online.de/hamster/specials.ini.html)
 Header.def     (http://delta2000-online.de/hamster/header.def.html)
 eMails.def     (http://delta2000-online.de/hamster/emails.def.html)
 MorVer.ini     (http://delta2000-online.de/hamster/morver.ini.html)

 Downloads:
 ¯¯¯¯¯¯¯¯¯¯
 Hamster / Korrnews / CopyIf (http://www.tglsoft.de/)
 MorVer (http://home.t-online.de/home/werner.jakobi/)

 Configuration:
 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯
 * Korrnews » generally » default characterset settings
 ======================================================================

 > Internal Characterset
 >           [windows-1252 (Western Europe)]
 > Allowable Characterset for decoding headers
 >           [ascii,iso-8859-1,iso-8859-15,utf-8]
 > Allowable Characterset for decoding bodies
 >           [ascii,iso-8859-1,iso-8859-15,utf-8]

 * Korrnews » Filter section » Characterset
 ======================================================================

 > Allowable Characterset for decoding headers
 >           [ascii,iso-8859-1,iso-8859-15,utf-8]
 > Allowable Characterset for decoding bodies
 >           [ascii,iso-8859-1,iso-8859-15,utf-8]
 > [×] Automatically use minimal Characterset

 * Korrnews » filter section » encodings
 ======================================================================

 > Standard-Text-encoding [8-Bit]
 > [×] convert quoted-printable to standard-encoding
 | [ ] convert Base64 to standard-encoding

 * MorVer
 ======================================================================

 Installation: (http://home.t-online.de/home/werner.jakobi/install.htm)

 * Outlook-Express » Tools » Options
 ======================================================================

 .------------.--------------.-----------.--------------.-------------.
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'.-----------.-'-----------'---+----------+-------------|
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |             '-----------'-----------------'----------'-------------|
 |                                                                    |
 | General ---------------------------------------------------------- |
 | [×] When starting, go directly to my 'Inbox' folder                |
 | [ ] Notify me if there are any new newsgroups                      |
 | [ ] Automatically display folders with unread messages             |
 | [ ] Automatically logon to Windows Messenger                       |
 |                                                                    |
 | Send/Receive messages -------------------------------------------- |

 | [×] Play sound when new messages arrive                            |
 | [ ] Send and receive messages on startup                           |
 | [ ] Check for new messages every [nn] Minutes                      |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.02/3.02/4.01
   See also MorVer-Installation: n/a

 .------------.--------------.-----------.--------------.-------------.
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'.-----------.-'-----------'---+----------+-------------|
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |-------------'           '-----------------'----------'-------------|
 |                                                                    |
 | Reading Messages ------------------------------------------------- |
 | [×] Mark messages read after displaying for [nn] Seconds           |
 | [ ] Automatically expand grouped messages                          |
 | [×] Automatically download message on viewing in previewwindow     |
 | [×] Show ToolTips in the messagelist for clipped items             |
 |                                                                    |
 | News ------------------------------------------------------------- |
 | [ ] Get [nn] Headers at a time                                     |
 | [ ] Mark all messages as read when exiting a newsgroup             |
 |                                                                    |
 | Fonts ------------------------------------------------------------ |
 |      .------------------.   .----------------------------------.   |
 |      |     Font [1]     |   |     International Settings [2]   |   |
 |      '------------------'   '----------------------------------'   |
 |                                                                    |
 | [1]  .- Font --------------------------------------------------.   |
 | [1]  |---------------------------------------------------------|   |
 > [1]  |    Western European                                     |   |
 | [1]  |---------------------------------------------------------|   |
 | [1]  | Proportional font:       [        Courier New        ]  |   |
 | [1]  | Fixed-width font:        [        Courier New        ]  |   |
 | [1]  | Font size:               [          Medium           ]  |   |
 > [1]  | Encoding:                [ Western European(Windows) ]  |   |
 | [1]  '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'   |
 |                                                                    |
 | [2]  .- International Settings --------------------------------.   |
 | [2]  |---------------------------------------------------------|   |
 > [2]  | Default encoding      [ Western European (Windows) ]    |   |
 | [2]  | [ ] Use default encoding for all incoming messages      |   |
 | [2]  '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'   |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 3.11/3.21/3.23/4.01
   See also MorVer-Installation: 3/4/6

 .------------.--------------.-----------.--------------.-------------.
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'.-----------.-'-----------'---+----------+-------------|
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |-------------'-----------'                 '----------'-------------|
 |                                                                    |
 | Requesting Read Receipts ----------------------------------------- |
 | [ ] Request a read receipt for all sent messages                   |
 |                                                                    |
 | Returning Read Receipt ------------------------------------------- |
 | [ ] Never send a read receipt                                      |
 | [×] Notify me for each read receipt request                        |
 | [ ] Always send a read receipt                                     |
 |     [ ] Unless it is send to a mailing list and my name is not on  |
 |         To or Cc lines of the message                              |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: n/a

 .------------.--------------.-----------.--------------.-------------.
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'.-----------.-'-----------'---+----------+-------------|
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |-------------'-----------'-----------------'          '-------------|
 |                                                                    |
 | Sending ---------------------------------------------------------- |
 | [×] Save copy of mail in the "Sent Items" folder                   |
 | [×] Send messages immediately                                      |
 | [×] Automatically put people I reply to in my Address Book         |
 | [×] Automatically complete e-mail addresses when composing         |
 | [×] Include message in reply                                       |
 > [ ] Reply to messages in the format in which they were sent        |
 |                             .----------------------------------.   |
 |                             |     International Settings [3]   |   |
 |                             '----------------------------------'   |
 |                                                                    |
 | [3]  .- International Send Settings ---------------------------.   |
 | [3]  |---------------------------------------------------------|   |
 > [3]  | Default encoding      [ Western European (Windows) ]    |   |
 | [3]  | [ ] Set default message direction right-to-left         |   |
 | [3]  |                                                         |   |
 | [3]  | [×] When replying to message always use English headers |   |
 | [3]  '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'   |
 |                                                                    |
 | Mail Sending Format ---------------------------------------------- |
 | [ ] HTML                                                           |
 > [×] Plain Text                                                     |
 |      .------------------------.   .----------------------------.   |
 |      |   HTML-Settings [4]    |   |  Plain Text Settings [5]   |   |
 |      '------------------------'   '----------------------------'   |
 |                                                                    |
 | [5]  .- Plain Text Settings------------------------------------.   |
 | [5]  |---------------------------------------------------------|   |
 > [5]  | [×] MIME                                                |   |
 > [5]  |     Encode text using  [quoted printable]               |   |
 > [5]  |     [×] Allow 8-bit characters in headers               |   |
 > [5]  | [ ] UUEncode                                            |   |
 > [5]  |     Automatically wrap text at [132] characters when    |   |
 > [5]  |     sending                                             |   |
 > [5]  | [×] Indent the original text with [>] when replying     |   |
 > [5]  |     or forwarding                                       |   |
 | [5]  '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'   |
 |                                                                    |
 | News Sending Format ---------------------------------------------- |
 | [ ] HTML                                                           |
 > [×] Plain Text                                                    |
 |      .------------------------.   .----------------------------.   |
 |      |   HTML-Settings [6]    |   |  Plain Text Settings [7]   |   |
 |      '------------------------'   '----------------------------'   |
 |                                                                    |
 | [7]  .- Plain Text Settings------------------------------------.   |
 | [7]  |---------------------------------------------------------|   |
 > [7]  | [×] MIME                                                |   |
 > [7]  |     Encode text using  [quoted printable]               |   |
 > [7]  |     [×] Allow 8-bit characters in headers               |   |
 > [7]  | [ ] UUEncode                                            |   |
 > [7]  |     Automatically wrap text at [132] characters when    |   |
 > [7]  |     sending                                             |   |
 > [7]  | [×] Indent the original text with [>] when replying     |   |
 > [7]  |     or forwarding                                       |   |
 | [7]  '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'   |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.01/3.11/3.14/3.23/4.01/4.02
   See also MorVer-Installation: 3/4/6

 .------------.--------------.-----------.--------------.-------------.
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'.-----------.-'-----------'---+----------+-------------|
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |-------------'-----------'-----------------'----------'             |
 |                                                                    |
 | Compose Font ----------------------------------------------------- |
 |                                               .----------------.   |
 | E-Mail     [10pt Courier New]                 | Font Settings  |   |
 |                                               '----------------'   |
 |                                               .----------------.   |
 | News       [10pt Courier New]                 | Font Settings  |   |
 |                                               '----------------'   |
 | Stationary ------------------------------------------------------- |
 |                                                   .------------.   |
 > [ ] E-Mail [                ]                     | Select     |   |
 |                                                   '------------'   |
 |                                                   .------------.   |
 > [ ] News   [                ]                     | Select     |   |
 |                                                   '------------'   |
 | Business Cards --------------------------------------------------- |
 |                                                   .------------.   |
 > [ ] E-Mail [                ]                     |   Edit     |   |
 |                                                   '------------'   |
 |                                                   .------------.   |
 > [ ] News   [                ]                     |   Edit     |   |
 |                                                   '------------'   |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 4.01
   See also MorVer-Installation: n/a

 .-------------.-----------.-----------------.----------.-------------.
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |------------.'-----------'-.-----------+---'----------'-------------|
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |            '--------------'-----------'--------------'-------------|
 |                                                                    |
 | Signature settings ----------------------------------------------- |
 > [ ] Add signature to all outgoing messages                         |
 > [×] Don't add signatures to Replies and Forwards                   |
 |                                                                    |
 | Signatures ------------------------------------------------------- |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 3.09
   See also MorVer-Installation: n/a

 .-------------.-----------.-----------------.----------.-------------.
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |------------.'-----------'-.-----------+---'----------'-------------|
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'              '-----------'--------------'-------------|
 |                                                                    |
 | Settings --------------------------------------------------------- |
 | [×] Always perform Spellcheck before sending                       |
 | [×] Propose corrections                                            |
 |                                                                    |
 | Always ignore in spell check ------------------------------------- |
 | [×] words in capitals                                              |
 | [×] words with numbers                                             |
 | [×] Original text in Replies or Forwarding                         |
 | [×] Internet addresses                                             |
 |                                                                    |
 | Language --------------------------------------------------------- |
 |                                .-------------------------------.   |
 | [English (UK-standard)]        |      Edit User Dictionary     |   |
 |                                '-------------------------------'   |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.03
   See also MorVer-Installation: n/a

 .-------------.-----------.-----------------.----------.-------------.
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |------------.'-----------'-.-----------+---'----------'-------------|
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'--------------'           '--------------'-------------|
 |                                                                    |
 | Virus Protection ------------------------------------------------- |
 | [ ] Internet zone (Less secure, but more functional)               |
 | [×] Restricted sites zone (More secure)                            |
 | [×] Warn me when other applications try to send mail as me         |
 | [×] Do not allow attachments to be saved or opened that            |
 |     could potentially be a virus.                                  |
 |                                                                    |
 | Secure E-Mail ---------------------------------------------------- |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 3.05
   See also MorVer-Installation: n/a

 .-------------.-----------.-----------------.----------.-------------.
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |------------.'-----------'-.-----------+---'----------'-------------|
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'--------------'-----------'              '-------------|
 |                                                                    |
 | Dial-Up ---------------------------------------------------------- |
 | [×] Ask before switching dial-up connections                       |
 | [ ] Hang up after sending and receiving                            |
 |                                                                    |
 | Internet Connection Settings ------------------------------------- |
 | Outlook-Express shares your Internet Connection   .------------.   |
 |    Settings with Internet Explorer                | Change [8] |   |
 |                                                   '------------'   |
 |                                                                    |
 | [8]  .---------------------------------------------------------.   |
 | [8]  | Dial-Up and Virtual Private Network Settings ---------- |   |
 > [8]  | [Dial-Up-Connection (Default)]                          |   |
 | [8]  |                                                         |   |
 > [8]  | [×] Never dial a connection                             |   |
 > [8]  | [ ] Dial whenever a network connection is not present   |   |
 > [8]  | [ ] Always dial my default connection                   |   |
 | [8]  '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'   |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.04/2.08/3.02
   See also MorVer-Installation: n/a

 Comment:
 Through these settings, one must construct future DFÜ-connections manually
 in order to be able to surf for example in the internet.  It recommends
 to design itself therefore corresponding shortcuts to the DFÜ-connections on the
 Desktop and to open this before the starting of an internet-application
 with a doubleclick.
 In the synchronizing of the Newsaccounts, it can possibly have to occur
 confirmed become that outlook-express indicates a message, similarly, to the following,
 it must be answered with "Retry", even if the system is not online and not going online.
 Suspect - I know; -)

    .---------------------------------------------------------.---.
    | Would you like to work Offline?                         | X |
    |---------------------------------------------------------'---|
    | No connection with the Internet could be established.       |
    | Click on "Work Offline", to read Internet content stored    |
    | local on your computer.                                     |
    |                                                             |
    | Click on "Retry" to try again to connect.                   |
    |       .------------------.     .-----------------.          |
    |       |   Work Offline   |     |       Retry     |          |
    |       '------------------'     '-----------------'          |
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

 .-------------.-----------.-----------------.----------.-------------.
 |  General    |   Read    |    Receipts     |  Send    |   Compose   |
 |------------.'-----------'-.-----------+---'----------'-------------|
 | Signatures | Spelling     | Security  | Connection   | Maintenance |
 |------------'--------------'-----------'--------------'             |
 |                                                                    |
 | Cleaning Up Messages --------------------------------------------- |
 | [×] Empty messages from the 'Deleted Items' folder on exit         |
 | [×] Purge deleted messages when leaving IMAP folders               |
 | [ ] Compact messages in the background                             |
 | [ ] Delete read messages bodies in newsgroups                      |
 | [ ] Delete news messages [nnn] days after being downloaded         |
 |     Compact messages when there is [20]% wasted space              |
 |                                                                    |
 | Troubleshooting -------------------------------------------------- |
 | [ ] E-Mail     [ ] News     [ ] IMAP     [ ] HTTP                  |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.06/3.06/3.07/3.08
   See also MorVer-Installation: n/a

 * Outlook-Express » Tools » Accounts » News » Hamster-account
 ======================================================================

 .----------------.--------------.------------------.-----------------.
 |   General      |    Server    |    Connection    |    Advanced     |
 |                '--------------'------------------'-----------------|
 |                                                                    |
 | News Account ----------------------------------------------------- |
 |           Enter the name for this server                           |
 |           [hamster.newsserver.localhost]                           |
 |                                                                    |
 | UserInformation -------------------------------------------------- |
 > Name                 [First-Name Last-Name]                        |
 | Organization         [Company-/Realname]                           |
 > E-Mail address       [email@domain.tld]                            |
 | Reply address        [reply@domain.tld]                            |
 > [×] Include this account when checking for new messages            |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: n/a

 .----------------.--------------.------------------.-----------------.
 |   General      |    Server    |    Connection    |    Advanced     |
 |----------------'              '------------------'-----------------|
 |                                                                    |
 | Server Information ----------------------------------------------- |
 > Server name [localhost or IP-Address of Hamster]                  |
 > [×] This server requires me to log on                              |
 >     Account name [Username of the respective HamsterAccount]       |
 >     Password     [Password of the respective HamsterAccount]       |
 >               [×] Remember password                                |
 >     [ ] Log on using Secure Password Authentication                |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.04/2.05
   See also MorVer-Installation: 3/4/5.1/7

 .----------------.--------------.------------------.-----------------.
 |   General      |    Server    |    Connection    |    Advanced     |
 |----------------'--------------'                  '-----------------|
 |                                                                    |
 | Connection ------------------------------------------------------- |
 > [ ] Always connect to this account using                           |
 >      [LAN-connection]                                              |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: n/a

 .----------------.--------------.------------------.-----------------.
 |   General      |    Server    |    Connection    |    Advanced     |
 |----------------'--------------'------------------'                 |
 |                                                                    |
 | Server Port Number ----------------------------------------------- |
 > News(NNTP) [119] without MorVer                                    |
 > News(NNTP) [3119] with MorVer                                      |
 > [ ] This server requires a secure connection (SSL)                 |
 |                                                                    |
 | Server Timeouts -------------------------------------------------- |
 | Short ---+---------- Long     2 Minutes                            |
 |                                                                    |
 | Descriptions ----------------------------------------------------- |
 | [×] Use newsgroup descriptions                               |
 |                                                                    |
 | Posting ---------------------------------------------------------- |
 | [ ] Break apart messages larger than [nn] KB                       |
 > [×] Ignore news sending format and post using:                     |
 >     [ ] HTML                                                       |
 >     [×] Nur Text                                                   |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: 4/5.1

 * Outlook-express » Tools » Accounts » E-MAIL » hamster-account
 ======================================================================

 .-------------.----------.--------------.--------------.-------------.
 |   General   |  Server  |  Connection  |  Security    |  Advanced   |
 |             '----------'--------------'--------------'-------------|
 |                                                                    |
 | E-Mail-Account --------------------------------------------------- |
 |           Enter the name of the Server.                            |
 |           [hamster.mailserver.localhost]                           |
 |                                                                    |
 | User Information ------------------------------------------------- |
 > Name                 [First-Name Last-Name]                        |
 | Organization         [Company-/Realname]                           |
 > E-Mail address       [email@domain.tld]                            |
 | Reply address        [reply@domain.tld]                            |
 > [×] Include this account when receiving mail or synchronizing      |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: n/a

 .-------------.----------.--------------.--------------.-------------.
 |   General   |  Server  |  Connection  |  Security    |  Advanced   |
 |-------------'          '--------------'--------------'-------------|
 |                                                                    |
 | Server Information ----------------------------------------------- |
 > My incoming mail server is a [POP3] Server                         |
 > Incoming mail (POP3) [localhost or IP-Address of Hamster]          |
 > Outgoing mail (SMTP) [localhost or IP-Address of Hamster]          |
 |                                                                    |
 | Incoming Mail Server --------------------------------------------- |
 > Account name [Username of the respective Hamster account]          |
 > Password  [Password of the respective Hamster account]             |
 >           [×] Remember password                                    |
 > [ ] Log on using Secure Password Authentication                    |
 |                                                                    |
 | Outgoing Mail Server --------------------------------------------- |
 > [ ] My server requires authentication                              |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): 2.04/3.19
   See also MorVer-Installation: 3/4

 .-------------.----------.--------------.--------------.-------------.
 |   General   |  Server  |  Connection  |  Security    |  Advanced   |
 |-------------'----------'              '--------------'-------------|
 |                                                                    |
 | Connection ------------------------------------------------------- |
 > [ ] Always connect to this account using:                          |
 >      [LAN-connection]                                              |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: n/a

 .-------------.----------.--------------.--------------.-------------.
 |   General   |  Server  |  Connection  |  Security    |  Advanced   |
 |-------------'----------'--------------'              '-------------|
 |                                                                    |
 | certificate ------------------------------------------------------ |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: n/a

 .-------------.----------.--------------.--------------.-------------.
 |   General   |  Server  |  Connection  |  Security    |  Advanced   |
 |-------------'----------'--------------'--------------'             |
 |                                                                    |
 | Server Port Number ----------------------------------------------- |
 > Outgoing Mail(SMTP) [25] without MorVer                            |
 > Outgoing Mail(SMTP) [3025] with MorVer                             |
 > [ ] This server requires a secure connection (SSL)                 |
 > Incoming Mail(POP3) [110] without MorVer                           |
 > Incoming Mail(POP3) [3110] with MorVer                             |
 > [ ] This server requires a secure connection (SSL)                 |
 |                                                                    |
 | Server Timeouts -------------------------------------------------- |
 | Short ---+---------- Long     2 Minutes                            |
 |                                                                    |
 | Sending ---------------------------------------------------------- |
 | [ ] Break apart messages larger than [nn] KB                       |
 |                                                                    |
 | Delivery --------------------------------------------------------- |
 | [ ] Leave a copy of messages on server                             |
 |     [ ] Remove from server after [nn] day(s)                       |
 |     [ ] Remove from server when deleted from 'Deleted Items'       |
 |                                                                    |
 '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
   See also (http://oe-faq.de/): n/a
   See also MorVer-Installation: 4

 ======================================================================
    Copyright © 2002 Markus Kohlmeyer  (hamster@delta2000-online.de
)

Source: C:\AA\Src20020607\EnHlp\html\faq18oo.htm - (163)


Mail red FAQ

How e-mails are routed with Hamster

Translated by Obbe-Jan Bakker

+--------------------+ +---------------------+ +-----------------------+
|      Provider      | |   Mailreader or     | |    Newsreader or      |
|    (Downstream)    | |    other tool       | |     other tool        |
+--------------------+ +---------------------+ +-----------------------+
          |                      |                         |
          v                      v                         v
+--------------------+ +---------------------+ +-----------------------+
| remote POP3 Client | | Local SMTP Server   | | News to Mails Gateway |
|                    | |                     | |  Local NNTP-Server    |
+--------------------+ +---------------------+ +-----------------------+
         |                       |                          |
         |  +-----------------+  |  +--------------------+  |
         |  | COM-interface   |  |  |      internal      |  |
         |  |  hs2 Engine     |  |  | Infomail Generator |  |
         |  +-----------------+  |  +--------------------+  |
         |             |         |                 |        |
         v             |         v                 |        |
+--------------------+ | +----------------------+  |        |
| Filter for direct  | | | Local domain filter  |  |        |
|   assignment to    | | |for special processing|  |        |
|     receiver       | | | to the delivery of   |  |        |
+--------------------+ | |   mails to local     |  |        |
          |            | |      receiver        |  |        |
          v            | +----------------------+  |        |
+--------------------+ |            |              |        |
|     General        | |            v              |        |
|     Mailfilter     | | +----------------------+  |        |
|     segment        | | |                      |  |        |
+--------------------+ | |     Mailrouter       |<-+        |
 |        |            +>|        with          |           |
 |        v              |  Local domain filter |<----------+
 | +-----------------+   |  for local receiver  |
 | | Userspecific    |   |        with          |        +-------------+
 | |   Mailfilter    |-->|  Mailalias-Filter    |------->|   Bounce    |
 | |   segment       |   |                      |<-------|  Generator  |
 | +-----------------+   +----------------------+        +-------------+
 |                          |  ^         |   |
 |                          |  |         |   |
 |    +---------------------+  |         |   +--------------+
 |    |       +----------------+         |                  |
 |    |       |                          |                  |
 |    v       |                          v                  v
 | +-------------------+  +-------------------+  +---------------------+
 | | Accountdatabase  |  |   Mailspool for    |  |   Mailspool for     |
 | |  for mailboxes   |  | external receivers |  |  internal receivers |
 | +-------------------+  +-------------------+  +---------------------+
 |                                  |                       |
 +----------+                       |                       |
            |                       |                       |
            v                       v                       v
+----------------------+  +-------------------+  +---------------------+
| Mail to News Gateway |  |      remote       |  |       local         |
|   NNTP-Database      |  |    SMTP-Client    |  |     POP3-Server     |
+----------------------+  +-------------------+  +---------------------+
            |                       |                       |
            v                       v                       v
+----------------------+  +-------------------+  +---------------------+
| local NNTP-Server    |  |      Provider     |  |   Mailreader or     |
|                      |  |     (Upstream)    |  |     other tool      |
+----------------------+  +-------------------+  +---------------------+

Source: C:\AA\Src20020607\EnHlp\html\faq18op.htm - (164)


SSL FAQ

Hamster and SSL

Translated by ??? YOU ???

von Philipp Wendler

Warnung:

Das ist die FAQ zur Benutzung mit einem Hamster, der eingebaute SSL-Unterstützung besitzt und kein STunnel mehr benötigt, also dem Hamster Classic ab 2.0.0.0. Für Hamster, die noch STunnel benötigen (z.B. Hamster Classic vor 1.3.23.140), sollte die dafür gedachte FAQ von mir benutzt werden.

Inhaltsverzeichnis:

1) Wie benutze ich mit dem Hamster SSL?
1.1) Wie kann ich über das Online-Menü SSL nutzen?
1.2) Wie kann ich meine Mails mit Hamster-Skripten oder per OLE über eine
     SSL-Verbindung abholen und verschicken?
1.3) Wie kann ich meine News über eine SSL-Verbindung abholen und
     verschicken?
2)   Hamster als SSL-Server
3)   Wie erhöhe ich die Sicherheit bei SSL?
4)   Was sind Zertifikate und wozu brauche ich sie?
5)   Wo bekomme ich Zertifikate von fremden Servern her?
6)   Wie erstelle ich mir ein eigenes Zertifikat?
7)   Wie benutze ich Zertifikate mit Hamster und SSL?
7.1) Serverzertifikate
7.2) Clientzertifikate
8)   Was für interessante URLs gibt es zu diesem Thema?

1) Wie benutze ich mit dem Hamster SSL?

Folgendes wird benötigt:

- OpenSSL DLL's	http://sites.inka.de/ximera/openssl_dlls.zip
- PGP-Signatur	http://sites.inka.de/ximera/openssl_dlls.zip.sig
- Hamster Classic ab Version 2.0.0.0	http://www.tglsoft.de

Diese ersten Schritte sind immer nötig:

Kopiere die beiden DLLs, die im ersten Zipfile enthalten sind in das Hamsterhauptverzeichnis oder ein Verzeichnis, das in der Umgebungsvariable %PATH% enthalten ist. Starte dann den Hamster neu.

1.1) Wie kann ich über das Online-Menü SSL nutzen?

Wenn der Server TLS unterstützt, trage den Server ganz normal ein und stelle die erste Auswahlliste in den "SSL-Einstellungen" auf "SSL immer nutzen". Wenn der Server öftersmal Probleme mit dem TLS hat, und du dann lieber über eine unsichere Verbindung abfragst, als gar nicht, kannst du es auch auf "SSL nutzen, wenn möglich" stellen.

Wenn der Server kein TLS unterstützt, dafür aber SSL über einen separaten Port, trage den Server in den Hamster ein, setzte die Auswahlliste auf "SSL bei sicherem Port nutzen" und ersetzte den Standardport durch den SSL-Port. Das ist normalerweise 995 bei POP3-SSL, 465 bei SMTP-SSL und 563 bei NNTP-SSL.

Wenn du das Zertifikat des Servers hast, stelle die zweite Checkbox auf den untersten Eintrag, "Peer mittels lokal vorhandener Zertifikate überprüfen", und trage die Datei mit dem Zertifikat in das Feld bei "Überprüfung über Datei" ein. Beachte, dass du dir ohne Zertifikat nicht sicher sein kannst, dass du auch wirklich mit dem gewollten Server sprichst. Du solltest dir also das Zertifikat beschaffen und benutzen. (Siehe dazu Frage 5).

Wenn du jetzt über das Online-Menü eine Verbindung zu diesem Server aufbaust, wird eine SSL-Verbindung aufgebaut.

Vergiss aber nicht, falls vorhanden, den selben Server ohne SSL aus der Gruppe im Online-Menü herauszunehmen.

1.2) Wie kann ich meine Mails mit Hamster-Skripten oder per OLE über eine SSL-Verbindung abholen und verschicken?

1.2.1) Wenn "HamMailExchange" im Skript bzw. ControlRunMail per OLE verwendet wird

Folge einfach den Anweisungen in Frage 1) und 1.1).

Außerdem muss in der Serverliste, die übergeben wird, eventuell der Port geändert werden.

1.2.2) Wenn HamFetchMail im Skript bzw. ControlRunFetchMail per OLE verwendet wird

Das einfachste ist es, du traegst alle Daten wie in Frage 1) und 1.1) beschrieben in das Menü ein.

Im Skript kannst du dann einfach HamFetchMail wie gewohnt benutzen und die SSL-Parameter weglassen. Wenn das aus irgendwelchen Gründen nicht geht, z.B. weil du den selben Server mit unterschiedlichen SSL-Konfigurationen abfragen willst, kannst du auch die Optionen im Skript übergeben:

HamFetchMail( <server>, <port>, <user>, <pass>, <destuser>, <filter>, <LeaveOnServer>, <SSLMode>, <SSLVerify>, <SSLCaFile> )

Per OLE musst du jetzt den neuen Befehl ControlRunFetchMailTLS statt ControlRunFetchMail verwenden. Wenn du die SSL-Daten schon im Menü angegeben hast, kannst du die SSL-Parameter auch leer lassen.

function ControlRunFetchMailTLS( <server>: WideString; <port>: WideString; <user>: WideString; <pass>: WideString; <destuser>: WideString; <SSLMode>:Integer; <SSLVerify>:Integer; <SSLCaFile>:WideString ) :Integer

Die Worte in Klammern müssen dabei ersetzt werden:

<server>, <user>, <pass>, <destuser>, <filter>, <LeaveOnServer> siehe Befehl "HamFetchMail" in der Hilfe
<port>     Der Port, auf dem man den SSL-Server erreichen kann. Das ist nur dann noch "pop3", wenn der Server TLS unterstützt, ansonsten normalerweise 995.
<SSLMode>   Wie soll SSL verwendet werden?
            0 - SSL abgeschaltet
            1 - SSL auf separatem Port
            2 - TLS, wenn möglich
            3 - TLS wird erzwungen
<SSLVerify>    Steuert die Zertifikatsüberprüfung (entspricht der -v-Option von STunnel).
            0 - Zertifikatsüberprüfung abgeschaltet
            1 - Zertifikatsüberprüfung, falls Zertifikat vorgelegt
            2 - Zertifikatsüberprüfung immer
            3 - Zertifikatsüberprüfung immer und Vergleich des Serverzertifikats mit lokaler Kopie
<SSLCaFile>    Der Pfad zum Zertifikat für die Überprüfung. Wenn leer, wird der im Menü eingestellte Standard genommen.

Beispiel:

Hamster-Skript:

#!hs2
HamFetchMail( "pop3-server", "995", "", "", "admin", "", 0, 1, 3, "" )

oder mit TLS:

#!hs2
HamFetchMail( "pop3-server", "110", "", "", "admin", "", 0, 3, 3, "" )

VBScript:

Set Hamster = Wscript.CreateObject( "Hamster.App" )
ControlRunFetchMailTLS( "pop3-server", "995", "", "", "admin", "", 1, 3, "" )
Wscript.DisconnectObject Hamster

oder mit TLS:

Set Hamster = Wscript.CreateObject( "Hamster.App" )
ControlRunFetchMailTLS( "pop3-server", "110", "", "", "admin", "", 3, 3, "" )
Wscript.DisconnectObject Hamster

Damit werden Mails aus einem Postfach auf dem Server pop3-server über SSL abgeholt. Das Serverzertifikat wird überprüft, es liegt im Standardpfad.

Das wär’s. Vergiss aber nicht, falls vorhanden, den Befehl zum Mailholen vom selben Server, aber nicht über SSL, zu löschen oder auszukommentieren.

1.2.3) Wenn HamSendMail / HamSendMailAuth im Skript bzw. ControlRunSendMail / ControlRunSendMailAuth per OLE verwendet wird

Auch hier ist es das Einfachste, du trägst alle Daten wie in Frage 1) und 1.1) beschrieben in das Menü ein.

Im Skript kannst du dann einfach HamSendMail(Auth) wie gewohnt benutzen und die SSL-Parameter weglassen. Wenn das aus irgendwelchen Gründen nicht geht, z.B. weil du den selben Server mit unterschiedlichen SSL-Konfigurationen abfragen willst, kannst du auch die Optionen im Skript übergeben:

HamSendMail( <server>, <port>, <from-select>, <to-select>, <SSLMode>, <SSLVerify>, <SSLCaFile> )
HamSendMailAuth( <server>, <port>, <user>, <pass>, <from-select>, <to-select>, <SSLMode>, <SSLVerify>, <SSLCaFile> )

Per OLE must du jetzt den neuen Befehl ControlRunSendMailTLS statt ControlRunSendMail und ControlRunSendMailAuthTLS statt ControlRunSendMailAuth verwenden. Wenn du die SSL-Daten schon im Menü angegeben hast, kannst du die SSL-Parameter auch leer lassen.

function ControlRunSendMailTLS( <server>: WideString; <port>: WideString; <from-select>: WideString; <to-select>: WideString; <SSLMode>: Integer; <SSLVerify>: Integer; <SSLCaFile>: WideString ) : Integer

function ControlRunSendMailAuthTLS( <server>: WideString; <port>: WideString; <user>: WideString; <pass>: WideString; <from-select>: WideString; <to-select>: WideString; <SSLMode>: Integer; <SSLVerify>: Integer; <SSLCaFile>: WideString ): Integer;

Die Worte in Klammern müssen dabei ersetzt werden:

<server>, <user>, <pass>, <from-select>, <to-select> siehe Befehl "HamSendMail" / "HamSendMailAuth" in der Hilfe
<port>         Der Port, auf dem man den SSL-Server erreichen kann. Das ist nur dann noch "smtp", wenn der Server TLS unterstützt, ansonsten normalerweise 465.
<SSLMode>      Wie soll SSL verwendet werden?
               0 - SSL abgeschaltet
               1 - SSL auf separatem Port
               2 - TLS, wenn möglich
               3 - TLS wird erzwungen
<SSLVerify>    Steuert die Zertifikatsüberprüfung (entspricht der -v-Option von STunnel).
               0 - Zertifikatsüberprüfung abgeschaltet
               1 - Zertifikatsüberprüfung, falls Zertifikat vorgelegt
               2 - Zertifikatsüberprüfung immer
               3 - Zertifikatsüberprüfung immer und Vergleich des Serverzertifikats mit lokaler Kopie
<SSLCaFile>    Der Pfad zum Zertifikat für die Überprüfung. Wenn leer, wird der im Menü eingestellte Standard genommen.

Beispiele:

Hamster-Skript:

#!hs2
HamSendMail( "smtp-server", "465", ".*", ".*", 1, 3, ""  )
# oder:
# HamSendMailAuth( "smtp-server", "465", "", "", ".*", ".*", 1, 3, ""  )

oder mit TLS:

#!hs2
HamSendMail( "smtp-server", "25", ".*", ".*", 3, 3, ""  )
# oder:
# HamSendMailAuth( "smtp-server", "25", "", "", ".*", ".*", 3, 3, "" )

VBScript:

Set Hamster = Wscript.CreateObject( "Hamster.App" )
Hamster.ControlRunSendMailTLS( "smtp-server", "465", ".*", ".*", 1, 3, "" )
; oder:
; Hamster.ControlRunSendMailAuthTLS( "smtp-server", "465", "", "", ".*", ".*", 1, 3, "" )
Wscript.DisconnectObject Hamster

oder mit TLS:

Set Hamster = Wscript.CreateObject( "Hamster.App" )
Hamster.ControlRunSendMailTLS( "smtp-server", "25", ".*", ".*", 3, 3, "" )
; oder:
; Hamster.ControlRunSendMailAuthTLS( "smtp-server", "25", "", "", ".*", ".*", 3, 3, "" )
Wscript.DisconnectObject Hamster

Damit werden alle Mails über den smtp-server per SSL verschickt. Das Serverzertifikat wird überprüft, es liegt im Standardpfad.

Das wär’s. Vergiss aber nicht, falls vorhanden, den Befehl zum Mailsenden zum selben Server, aber nicht über SSL, zu löschen oder auszukommentieren.

1.3) Wie kann ich meine News über eine SSL-Verbindung abholen und verschicken?

Trage alle Daten in das Menü ein, wie unter Frage 1) und 1.1) beschrieben. Wenn du alles im Menü richtig eingetragen hast (eventuellen Portwechsel von 110 auf 563 beachten) und du jetzt im Skript oder per OLE den Befehl gibst, News von diesem Server abzuholen, benutzt der Hamster automatisch SSL.

2) Hamster als SSL-Server

Um SSL mit den lokalen Servern von Hamster zu verwenden, brauchst du ein Zertifikat mit geheimen Schlüssel. Wie Du ein eigenes Zertifikat erzeugen kannst, beschreibt Punkt 6).

Nun zur Hamster-Konfiguration:

Im Hamster unter "Einstellungen" -> "Grundeinstellungen" müssen auf der Registerkarte "SSL" der im Feld "Schlüsselpaar" die Datei, die dein eigenes Zertifikat mit dem dazugehörigen privaten Schlüssel im PEM-Format enthält, angegeben werden. Wenn du den privaten Schlüssel mit einem Passwort geschützt hast, musst du dieses Passwort ebenfalls eingeben. Wenn du es nicht speichern lassen willst, kannst du auch "?" angeben, dann fragt der Hamster nach jedem Start einmal nach dem Passwort. Die nächsten zwei Einstellfelder sind nur interessant, wenn du Clientzertifikate benützen willst.

Auf der Registerkarte des jeweiligen Servers unter "Einstellungen" -> "Lokale Server" einstellen, dass TLS verwendet werden soll. Wenn alle deine Clients TLS unterstützen, solltest du das Auswahlfeld auf "Erzwinge TLS" stellen, ansonsten auf "Erlaube TLS".

Ab dem nächsten Start des jeweiligen Servers, also beim Starten des Hamster oder beim Benutzen des jeweiligen Eintrags im Menü "Lokale Server", wird der Server mit SSL-Unterstützung gestartet.

Beachte bitte, dass es nicht möglich ist, Hamster als SSL-Server auf einem separaten SSL-Port zu benutzen. RfC 2595 nennt gute Gründe, warum eine solche Konfiguration nicht mehr verwendet werden sollte. Möchtest du Hamster trotzdem über einen SSL-Port verwenden, brauchst du dazu einen externen SSL-Wrapper, z.B. das Programm STunnel. Der Aufruf von STunnel könnte dann so aussehen (wenn STunnel und Hamster auf dem selben PC laufen, und per SSL aus dem ganzen Internet auf den POP3-Server zugegriffen werden können soll):

stunnel -r 127.0.0.1:110 -d 0.0.0.0:995 -p stunnel.pem -D 7

Den Hamster bindest du dann an 127.0.0.1 und stellst ihn auf "Kein TLS". Zu einer ausführlichen Erklärung lies dir die Ausgabe von "stunnel -h" durch.

Beachte bitte, dass, wenn der Hamster als Server Verbindungen vom Internet annehmen soll, auf jeden Fall starke Passwörter unbedingt notwendig sind. In dieser Richtung hilft kein SSL, außer du verwendest Client-Zertifikate. Also, für _jeden_ Hamsteraccount starke Passwörter verwenden.

Schalte in den Einstellungen der lokalen Server auf der Seite Mail SMTP-AUTH ein, wenn du einen Mailreader hast, der dies beherrscht. Dabei muss der Mailreader sich mit einer gültige Username-Passwort-Kombination beim Hamster authentifizieren, bevor er Mails verschicken kann. Wenn dein Mailreader dies nicht kann, schalte SMTP-after-POP3 ein. Dabei muss der Mailreader vor dem Mailverschicken, Mails abholen. Wenn du keines von beiden machst, kann jeder, ohne ein Passwort kennen zu müssen, Spam über deinen Rechner verschicken.

Erstelle auch einen Benutzer mit Usernamen "nntpdefault" und Passwort "*". Dieser Benutzer wird immer dann verwendet, wenn der Client keinen Benutzernamen und kein Passwort beim lokalen Newsserver angibt. In den Einstellungen dieses Benutzers darf dann in keinem Eingabefeld mit weißem Hintergrund außer "voller Name" irgendetwas stehen und der Benutzer darf keine Mailbox haben, so dass dieser Benutzer (und damit auch ein eventueller Spammer oder Angreifer ohne Benutzernamen und Passwort) gar nichts machen kann.

Zur Einrichtung von Client-Zertifikaten siehe Frage 7.2.1).

3) Wie erhöhe ich die Sicherheit bei SSL?

Für eine SSL-Verbindung braucht OpenSSL und damit der Hamster, denn der benutzt die OpenSSL-Biliotheken, möglichst zufällige Zufallsdaten.

Dazu wird automatisch die Datei "randseed.!!!" im Hamsterverzeichnis angelegt, in der die Zufallsdaten aus dem internen Pseudozufallszahlengenerator (PRNG) von OpenSSL gespeichert werden.

Wenn Du eine Quelle guter Zufallsdaten hast, die Du stattdessen verwenden möchtest, kannst Du unter "Einstellungen" -> "Grundeinstellungen" auf der Registerkarte "SSL" im Feld "Externe Datei mit Zufallsdaten für PRNG" eine andere Datei angeben, aus der Zufallsdaten gelesen werden. Bitte beachte dabei, dass Hamster in die Datei "randseed.!!!" nach jeder Benutzung neue Zufallsdaten schreibt, nicht aber in die zusätzlich angegebene Datei.

Vielleicht solltest du auch mal über Server- und Client-Zertifikate nachdenken. Siehe dazu Frage 4) und folgende, vor allem 7).

4) Was sind Zertifikate und wozu brauche ich sie?

Zertifikate kann man vielleicht mit einem Pass vergleichen. Du zeigst es / ihn vor, wenn du willst, dass andere sich darauf verlassen können, dass du wirklich der bist, der du zu sein vorgibst. Dafür bürgt jemand, dem du traust: eine Certificate Authority (CA) oder der Staat. Du kannst zwar nicht wie bei einem Pass mit dem Bild prüfen, ob das Zertifikat wirklich dem gehört, der es benutzen will, aber das macht nichts, da der andere ohne den zum öffentlichen Schlüssel (= Zertifikat) passenden geheimen Schlüssel oder eine sehr, sehr große Rechenpower nichts entschlüsseln kann, was du an den Inhaber des Zertifikats schickst.

Self-Signed Zertifikate musst du dir vorstellen wie den Pass eines Königs: Der Austellende (hier: der Staat = König) bürgt für sich selbst.

Du brauchst also Zertifikate, wenn du sichergehen willst, dass der, mit dem du sprichst, wirklich der ist, mit dem du sprechen willst und nicht irgendein x-beliebiger Betrüger.

Technisch gesehen ist ein Zertifikat ein öffentlicher RSA-Schlüssel. Weil im Normalfall nur der richtige Server den dazu passenden privaten Schlüssel hat, weißt du, wenn der Server deine Texte richtig entschlüsseln kannst, ist es der richtige.

Vorraussetzung dafür ist natürlich, dass du das richtige Zertifikat (= öffentlicher Schlüssel) hast. Wenn du dir dieses über das Internet holst, wie in Frage 5) beschrieben, kannst du dir dessen erst mal _nicht_ sicher sein! Eine Möglichkeit, eine größere Gewissheit zu bekommen, sind Signaturen.

Nehmen wir an, es hat schon mal jemand (z.B. ein Trustcenter) überprüft, ob dieses Zertifikat echt ist und er das Zertifikat unterschrieben hat. Wenn du jetzt den (garantiert) richtigen öffentlichen Schlüssel von diesem Jemand besitzt und diesem vertraust, kannst du dir auch über das Zertifikat sicher sein.

5) Wo bekomme ich Zertifikate von fremden Servern her?

Dazu benötigst du OpenSSL. Für Windows gibt es ein bereits fertig kompiliertes Toolkit:

http://sites.inka.de/ximera/openssl_exe.zip

PGP-Signatur: http://sites.inka.de/ximera/openssl_exe.zip.sig

Starte OpenSSL, während eine Onlineverbindung besteht, mit diesen Parametern:

s_client -connect <Server>:<Port> > OpenSSL.log

Für <Server>:<Port> gib die Adresse des SSL-Servers an, dessen Zertifikat du bekommen willst.

öffne anschließend die Datei OpenSSL.log im OpenSSL-Verzeichnis mit einem beliebigen Texteditor kopiere alles von einschließlich der Zeile

-----BEGIN CERTIFICATE-----

bis zu einschließlich der Zeile

-----END CERTIFICATE-----

in eine neue Datei. Gib dieser Datei einen möglichst aussagekräftigen Namen mit der Endung .pem und lege sie in dein Zertifikat-Verzeichnis. OpenSSL.log kannst du jetzt löschen.

Wie du das Zertifikat benutzt, steht in Frage 1.1).

Zertifikate von Trustcentern bekommst du meist auf deren Website.

Bitte beachte, dass du dir mit dieser Methode nicht ueber die Echtheit der Zertifikate sicher sein kannst.

6) Wie erstelle ich mir ein eigenes Zertifikat?

Als erstes ein kurzer Hinweis: Du benötigst meist kein eigenes Zertifikat, wenn du nur SSL-Verbindungen zu einem fremden Server, wie Web.de oder GMX aufbauen willst, da diese meistens keine Clientzertifikate unterstützen.

Zum Zertifikat-Erstellen benötigst du OpenSSL. Du kannst entweder OpenSSL selbst kompilieren oder ein bereits fertig kompiliertes Toolkit verwenden:

http://sites.inka.de/ximera/openssl_exe.zip

PGP-Signatur: http://sites.inka.de/ximera/openssl_exe.zip.sig

Außerdem benötigst du die 2 Dateien "MakeCert.bat" und "cert.cnf", die du unter folgendem URL bekommst:

http://sites.inka.de/ximera/hamster/MakeCert.zip

Kopiere die beiden Dateien aus dem Ziparchiv in das Verzeichnis von OpenSSL.exe, führe MakeCert.bat aus und folge den Anweisungen. Der öffentliche Schlüssel (= Zerfikat) und ein dazugehöriger privater RSA-Schlüssel befindet sich dann in der Datei certificate.pem im OpenSSL-Verzeichnis.

Das Zertifikat alleine kann bedenkenlos weitergegeben werden, aber der RSA-Schlüssel nicht! Wenn ein Angreifer beides hat, kann er so tun, als wäre er du und die ganzen Zertifikate wären wirkungslos. Also, vor dem Weitergeben des Zertifikats alles von einschließlich der Zeile

-----BEGIN RSA PRIVATE KEY-----

bis einschließlich der Zeile

----END RSA PRIVATE KEY-----

löschen.

Achtung!

========

Der RSA-Schlüssel darf _nur_ auf dem Computer sein, der sich mit diesem Zertifikat authentifizieren soll, also auf dem Server bei Verwendung von Serverzertifikaten und auf dem Client bei Verwendung von Clientzertifikaten. Gib ihn deshalb nicht weiter! Gelangt der Schlüssel und das Zertifikat in fremde Hände, kann der Dritte ohne irgendein Problem so tun, als wäre er du! Der ganze Sinn von Zertifikaten wäre also hinfällig.

Zum Einbinden des Zertifikates in den Hamster siehe Frage 2).

7) Wie benutze ich Zertifikate mit Hamster und SSL?

Eine Anmerkung: Du kannst auch ohne Probleme Serverzertifikate und Clientzertifikat gleichzeitig verwenden.

7.1) Serverzertifikate

7.1.1) Einrichten auf dem Server

Wie du ein eigenes Zertifikat erstellen kannst, steht in Frage 6). Eingebunden wird es, indem du es in den Grundeinstellungen auf der Registerkarte SSL in der ersten Box eingibst. Außerdem musst du eventuell noch das Passwort angeben.

7.1.2) Einrichten auf dem Client

Du benötigst auf dem Client das Zertifikat des Server, der sich beim Client authentifizieren soll. Wie du es bekommst, steht in Frage 5).

Wie du das Zertifikat benutzt, steht in Frage 1.1), wenn du die SSL-Daten im Menü eintragen willst, oder in Frage 2.2.x), wenn du sie im Skript oder im OLE-Befehl angeben willst.

7.2) Clientzertifikate

7.2.1) Einrichten auf dem Server

Du benötigst auf dem Server das Zertifikat des Clienten (nicht jedoch deren private Schlüssel!), der sich beim Server authentifizieren soll. Außerdem muss der Hamster wie in Frage 2) beschrieben vollständig für den Betrieb als TLS-Server eingerichtet sein.

In den Grundeinstellungen auf der Registerkarte SSL gibst du entweder bei "Datei mit Zertifikaten zwecks Überprüfung" eine Datei an, die alle Zertifikate gesammelt enthält, oder bei "Pfad mit Zertifikaten zwecks Überprüfung" ein Verzeichnis, in dem alle Zertifikate in Einzeldateien liegen. Die Namen der Dateien müssen dann dem Format "<Hash_des_Zertifikates>.0" entsprechen. Ein Skript, das dieses Format aus .pem-Dateien erzeugt, gibt es von Martin Germann unter

http://sites.inka.de/ximera/hamster/SSL-Cert-Hash.hsc

Es benötigt dazu das OpenSSL-Toolkit von

http://sites.inka.de/ximera/openssl_exe.zip

PGP-Signatur: http://sites.inka.de/ximera/openssl_exe.zip.sig

Jetzt kann der Hamster zwar die Zertifikate vergleichen, aber er fängt mit dem Ergebnis noch nichts an. Damit der Hamster nur Verbindungen mit gültigem Clientzertifikat akzeptiert, musst du in der Hamster.Ini im Abschnitt [SSL] den Eintrag VerifyLevel auf 2 oder 3 stellen. Dann akzeptiert der Hamster nur noch Verbindung mit einem gültigen Zertifikat.

7.2.2) Einrichten auf dem Client

Wie du ein eigenes Zertifikat erstellen kannst, steht in Frage 6). Eingebunden wird es, indem du es in den Grundeinstellungen auf der Registerkarte SSL in der ersten Box eingibst. Außerdem musst du eventuell noch das Passwort angeben.

8) Was für interessante URLs gibt es zu diesem Thema?

Als erstes nochmal die Download-URLs:

- Hamster classic	http://www.tglsoft.de
- OpenSSL-Sourcecode	http://www.openssl.org/
- Windows Binaries aus dem OpenSSL-Toolkit	http://sites.inka.de/ximera/hamster.html#openssl-binaries

URLs zum Einlesen:

- Hamster und SSL	http://sites.inka.de/ximera/hamster.html
- Anleitung zum Kompilieren von OpenSSL unter Windows:	http://sites.inka.de/ximera/hamster.html#openssl-kompilieren
- OpenSSL	http://www.openssl.org/
- ModSSL	http://www.modssl.org/
- Stunnel	http://www.stunnel.org/
- Zertifikate mit STunnel benutzen:	http://www.stunnel.org/faq/certs.html

Newgroups:

- news:de.comp.security.misc

--

Philipp Wendler <philippwendler@web.de>

Version: 3.3

letzte Änderung: 15.12.2002

Source: C:\AA\Src20020607\EnHlp\html\faq18q8.htm - (165)


E-Mail clients and authentication

Overview E-mail-clients for authentication at the local servers

Translated by Obbe-Jan Bakker

Translated from German text of Daniel Srostlik

[Digest of mail clients and their respective supported authentication procedures.

This assembly does not claim to be complete.

If you have additional information please email this to the e-mail address danielsk@gmx.de.

Forte Agent: http://www.forteinc.com

SMTP: Login

POP3: APOP

SMTP-Auth is activated under option | User and system profiles | system, Button [SMTP Authentication].

AKMail: http://www.akmail.com/

SMTP: CRAM-MD5

The Bat from version 1.39: http://www.ritlabs.com/the_bat/

SMTP: CRAM-MD5, DIGEST-MD5, PLAIN, LOGIN

POP3: CRAM-MD5, PLAIN, LOGIN, APOP

Because the Bat uses SMTP-Auth ituses, it must be activated in the following menu: Account | Properties | Transport, then click on “More” and register the corresponding statements in the next menu.

Eudora from version 4.3: http://www.eudora.com/

SMTP: CRAM-MD5, PLAIN, LOGIN

POP3: Kerberos_V4, RPA, APOP

SMTP-AUTH ist default activated.

The settings can be found under “Tools | Options | Getting Started” and/or under “Tools | Personalities”.

Gnus: http://www.gnus.org/

SMTP: CRAM-MD5

The Patch to make Gnus work with SMTP-AUTH is available at http://www.pdc.kth.se/~jas/emacs-rfc2554.html.

Netscape 4: http://www.netscape.com/

SMTP: Netscape 4.0x: LOGIN / Netscape 4.x: LOGIN, PLAIN

Settings: | Settings | Mail & newsgroups | Mail-Server | Server for outgoing Mail (SMTP):

Register User name for mail-server, the password will be requested when a connection is established.

Netscape 6:

In the menu select: Tasks | Mail

In the new window then: change | mail / news account-settings | server for outgoing mails | mark always use name and password.

Outlook Express 4.x / 5.x: http://www.microsoft.com/

SMTP: LOGIN

Activate Tools | Accounts --> select account --> Properties | Servers | Outgoing Mail Server: activate "Log on using Secure Password Authentication".

Outlook 97:

SMTP: LOGIN, PLAIN

There is a necessary Patch at http://office.microsoft.com/germany/downloads/9798/outlimep.aspx

Outlook 98 and newer versions

SMTP: LOGIN, PLAIN

The configuration is the same as in Outlook Express

Pegasus Mail from version 3.12c: http://www.pmail.com/

SMTP: CRAM-MD5, LOGIN

POP3: APOP

If the server supports it and in Pegasus in Menu “Tools | Internet Options | Sending (SMTP)” the option “Login with username:password:” has been chosen, then automatically CRAM-MD5 will be used. This can be checked for example in this way that the Pegasus start command line option is “winpm-32.exe -z 32”. In Pegasus - UserIndex there will be a file named “TcpXXXX.wpm”, containing the communications protocol.

Source: C:\AA\Src20020607\EnHlp\html\faq18q9.htm - (166)


Router_and_Hamster

Can I use Hamster with a Router?

Translated by Obbe-Jan Bakker

The Router ensures that the hamster has a permanent connection to the internet. Either you have have a dedicated line, that goes naturally over a "correct" Router, or you have a Dial-in Router, that produces the connection if necessary. For the connected systems, it looks in both cases like a permanent connection.

The hamster cannot affect the structure of the connection directly here. Therefore you must simply omit in your scripts the commands concerning connect/disconnect. If you do not use scripts, the same applies. The menu commands function likewise.

With the following script can be tested if a connection to the Internet is possible.

sub CheckbyPingjd

# note: ping under Windows 2000 might not give the desired result
# Ulli Fetzer reported that
#    Fast pinger, version 2.07 (Freeware)
#    Web: http://www.kwakkelflap.com
# worked for him in this case.
# Source: <afdeov.dk.1@333200003139-0001.dialin.t-online.de>

varset ( $computer , "please.enter.your.address.here" )
varset ( $response , $try,  1 )
varset ( $maxtry   , 3 )

      if ($rechner = "please.enter.your.address.here" )
          warning ( "LART: " + $computer )
          warning ( "Never run a Script without checking it before" )
          quit
      endif

  while ($response = 1)
      Execute ("ping -n 1 " + $computer, "" , 0 , True, $response)
         If ( $try = $maxtry )
           warning ( $computer + " can not be found at the moment" )
           quit
         else
          print ( $try + " Ping to " + $computer + " is done" )
          inc ($try)
         endif
  endwhile

  print ( $computer + " reacted to PING " )

endsub

Source: C:\AA\Src20020607\EnHlp\html\faq18qa.htm - (167)


Hamster update

Install new Hamster versions (Update)

Translated by Obbe-Jan Bakker

Translation (partially) from German text by Wilfried Kramer.

This is easy. First get the new version, usually by downloading from the Internet. If Hamster is already installed and running than close Hamster before installing the new version. Note!, do not just minimize Hamster, but really close the Hamster program! After closing Hamster unzip the new version into the main Hamster folder. In case of a standard-installation this is all that needs to be done. If the existing Hamster was configured to use different folders for example for groups, scripts or script-modules you will have to make sure the files are copied/moved to the appropriate folders.

Example:

Move the module hwindows.hsm to the 'path for modules' as set in menu 'Scripts/Mangage scripts and modules'.

How do I install a beta-version?

This is a bit more complicated. These test-versions / beta-versions usually contain only the changed files. Therefore it is recommended to always first install the latest stable version followed by installing the beta-version. The most reliable way is to install the beta-versions since the latest stable version in order of their version-number.

In both cases after installing Hamster start the program Hamster.exe. If configuration changes are necessary after installing a new version Hamster will if possible perform these changes immediately when started, otherwise the administrator will be requested to make the necessary changes to the configuration.

Especially after installing a new beta-version check if there is a more up-to-date helpfile available. In general beta-versions are released without helpfile but with a list of changes (changes-de.dat, changes-en.dat).

Source: C:\AA\Src20020607\EnHlp\html\faq18qb.htm - (168)


Hamster and authentication

Hamster and authentication

Translated by ??? YOU ???

Autor: Jörn Weber

1. Einführung in die Grundlagen der Authentifikation

1.1 Kryptografische Algorithmen

MD2   RFC 1319
MD4   RFC 1320
MD5   RFC 1321
SHA1  RFC 3174

Grundlage sind die RFC 1320 und 1321. Sie definierten ein MD4 und MD5 welche als Ausgabe einen MD4 bzw. MD5 als Digest liefern.

MD4 besitzt inzwischen nur noch historischen Wert. Im Jahre 2001 wurde auch SHA1 in RFC 3174 standardisiert. SHA1 liefert ebenfalls einen Digest. SHA1 liefert ebenfalls einen Digest, der im Gegensatz zu MD5 mit wesentlich weniger Konstanten auskommt und deshalb theoretisch sicherer ist als MD5. Gegen SHA1 ist bisher auch, im Gegensatz zu MD5, kein theoretischer Angriff bekannt.. SHA1 liefert einen 160-Bit-Digest (20 Byte), MD5 hingegen nur einen 128-Bit-Digest (16 Byte). Der Angriff gegen MD5 ist ausschließlich theoretischer Natur, da es nicht ausreichend Rechenzeitkapazität gibt ihn zu brechen. Setzt man die Lebensdauer von MD5 in ein Verhältnis zur Lebensdauer von Passwörtern, ist MD5 auch in den nächsten Jahrzehnten sicher. Bei SHA1 muss man bezüglich der Sicherheit ebenfalls bedenken, dass er in allen Aspekten noch nicht so gut untersucht ist wie MD5. Meiner Einschätzung nach ist der Unterschied zwischen MD5 und SHA1 bezüglich Sicherheit eher paranoid und eine Glaubensfrage. Ein weiterer Aspekt bezüglich der Sicherheit dieser Verfahren ist die praktische Implementation der Hash Algorithmen. Um die Hash-Algorithmen auch für kurze Textfetzen, wie zum Beispiel Passwörter, unangreifbar zu machen, wird der jeweilige Hash-Algorithmus im HMAC-Verfahren doppelt auf das Passwort angewendet. Die Formel hierfür lautet:

ipad = String gefüllt mit dem Byte 0x36 entsprechend der Länge des Hash
opad = String gefüllt mit dem Byte 0x5C entsprechend der Länge des Hash
K    = Das zu sichernde Passwort
H    = Hash-Funktion, zum Beispiel MD5 oder SHA1

Hash = H(K XOR opad, H(K XOR ipad, text))

Weiterhin ist entscheidend, ob nur der Server den Client oder auch der Client den Servern authentifiziert, um einen "man in the middle“-Angriff zu vermeiden. Das CRAM-Verfahren authentifiziert nur den Client, nicht aber den Server. Erst das DIGEST-Verfahren(z.B. DIGEST-MD5) ermöglicht auch eine Authentifizierung des Servers.

1.2. Login-Verfahren

Um das Login sicherer zu gestalten, wurden im Laufe der Zeit unterschiedliche Methoden für die einzelnen Protokolle entwickelt:

IMAP4-Auth       RFC 2060
POP-Auth         RFC 1734
POP-SASL-AUTH    RFC 2449
APOP             RFC 1939
HTTP-Auth        RFC 2069
SMTP-Auth        RFC 2554
SMTP after POP3  (nicht standardisiert)

Diese Protokolle nutzen unterschiedliche Methoden für das sichere Login, aber teilweise die selben Hash-Funktionen und Key-Verwaltungsverfahren.

HMAC RFC 2104
CRAM RFC 2195
SESS RFC 2617
SASL RFC 2222

Zum Beispiel verwendet APOP den MD5-Digest(nicht verwechseln mit dem SASL-Verfahren MD5-DIGEST). Zu Beginn wurden das unverschlüsselte "LOGIN"-Verfahren und mehr oder minder sichere Verfahren wie KERBEROS, S/Key und GSSAPI verwendet. Für POP und IMAP wurde dann erstmalig das für beide Protokolle gemeinsame HMAC-Verfahren eingeführt, welches von CRAM verwendet wird. CRAM definiert selber nur CRAM-MD5, da zu diesem Zeitpunkt SHA1 noch nicht als RFC standardisiert war. Für HTTP wurde parallel ein weiterentwickeltes Verfahren namens MD5-SESS eingeführt, was ebenfalls für andere Hash-Funktionen wie SHA1 vorbereitet war, ohne sie selbst zu definieren. Um dem Wildwuchs der einzelnen Verfahren und Hash-Methoden einen vernünftigen Rahmen zu geben und das vom jeweiligen Server angebotene Verfahren automatisch auswählen zu können wurde dann mit SASL ein Auswahlverfahren für Login-Mechanismen eingeführt. Dieser RFC definierte sofort die SASL-Mechanismen für S/Key, KERBEROS und GSSAPI und übernahm LOGIN und CRAM-MD5 von IMAP/POP. Beim LOGIN-Mechanismus handelt es sich um ein primitives, unverschlüsseltes Verfahren, welches nur im Notfall verwendet werden sollte. In SMTP wurde SASL mit RFC 2554 übernommen. In RFC 2449 wurde SASL endgültig für POP3 definiert und in den CAPA-Befehl verlagert. Bis zu diesem Zeitpunkt wurde die Authentifikation bei POP3, wie bei IMAP, im AUTH-Befehl platziert. Es wird heute noch von vielen POP3-Servern die Authentifikation ohne SASL-Mechanismus angeboten. Inzwischen wurden weitere SASL-Mechanismen standardisiert, welche für alle Protokolle gültig sind. Das sind:

PLAIN und        RFC 2595  TLS/SSL unverschlüsselt, da SSL an sich schon
EXTERNAL                   sicher ist

SECURID          RFC 2808  für RSA-Chipkarten-Anwendungen. SECURID
                           ermöglicht auch andere HASH-Funktionen
                           als z.B. SHA1

DIGEST-MD5 und   RFC 2831  übernimmt die Digest-Methoden von HTTP und macht
MD5-SESS                   HTTP konform zu SASL. DIGEST ermöglicht auch
                           andere HASH-Funktionen als MD5, z.B. SHA1.
                           Dieses Verfahren ermöglicht auch den Server zu
                           authentifizieren

OTP-MD5          RFC 2444  für "One Time Passwords". OTP ermöglicht auch
                           andere HASH-Funktionen als MD5 z.B. SHA1

ANONYMOUS        RFC 2245  für anonymes Login

ISO/IEC 9798-3   RFC 3163  für die Benutzung von Zertifikaten als
                           Ausweis fürs Login. Basiert auf der
                           PKI-Infrastruktur

Dazu kommen dann die schon bekannten Mechanismen

KERBEROS         RFC 2222  Für homogene Umgebungen. basierend auf
                           Ticketserver

S/Key            RFC 2222  Für auf einander folgende abhängige Keys. Das
                           Verfahren ist nur schwer handhabbar bei
                           öffentlichen Servern und eher gut für Intranetze

LOGIN            RFC 2222  Klartext-LOGIN

GSS-API          RFC 2222  Für Anwender-Applikationen in Verbindung mit
                           Kerberos

CRAM-MD5         RFC 2195  Weit verbreitetes praktisch sicheres Verfahren.
                           CRAM ist auch mit SHA1 als Hash-Algorithmus
                           möglich. Methodischer Nachfolger ist DIGEST-SHA1

1.3 Andere Authentitifizierungsverfahren

Eine Ausnahme bei den Authentifizierungsverfahren ist das "SMTP after POP3"-Verfahren. Bei diesem Verfahren wird ein dem eigentlichen SMTP-Login vorhergehender erfolgreicher POP3-Zugriff zur Authentifikation verwendet. Es ist im eigentlichen Sinne kein selbstständiges Authentifizierungsverfahren, sondern die Mitverwendung des Authentifizierungsverfahren eines anderen Protokolls. Dieses Verfahren besitzt erhebliche Sicherheitsmängel und sollte nach Möglichkeit nicht mehr verwendet werden.

2. Authentifikationsverfahren für die lokalen Server des Hamsters

Folgende Authentifikationsverfahren sind an allen lokalen Servern des Hamsters möglich:

LOGIN, CRAM-MD5, CRAM-SHA1, PLAIN

Der Mechanismus LOGIN ist unsicher und sollte nach Möglichkeit nicht verwendet werden. Er lässt sich im Setup-Menü aller lokalen Server abschalten. Der Mechanismus PLAIN kann nur zusammen mit dem SSL-Verfahren verwendet werden. Für den lokalen POP3-Server kann auch POP3-Auth ohne SASL-Mechanismus und das APOP-Verfahren zur Authentifikation verwendet werden. Für den lokalen SMTP-Server kann als Authentifikationsverfahren auch das "SMTP after POP3"-Verfahren verwendet werden. Eine gemeinsame Nutzung dieses Verfahrens mit SMTP-Auth ist technisch bedingt nicht möglich. Allgemein ist aber von der Verwendung des "SMTP after POP3"-Verfahrens aus Sicherheitsgründen abzuraten.

3. Authentifikationsverfahren für die externen Server.

Für die Authentifikation des Hamsters bei den Servern der Provider können folgende Verfahren verwendet werden:

LOGIN, CRAM-MD5, CRAM-SHA1, PLAIN

Der Mechanismus LOGIN ist unsicher und sollte nach Möglichkeit nicht verwendet werden. Um die Verwendung dieses unsicheren Verfahren zu vermeiden, lässt sich im Setup-Menü der externen Server bei der Passworteingabe ein sicheres Authentifizierungsverfahren, wie zum Beispiel CRAM-MD5, erzwingen. Der Mechanismus PLAIN kann nur zusammen mit dem SSL-Verfahren verwendet werden. Das "SMTP after POP3"-Verfahren kann mittels eines Scriptes nach folgenden Beispiel realisiert werden:

HamFetchMail( <server> )

HamWaitIdle

HamSendMail( <server> )

Allgemein ist aber von der Verwendung des "SMTP after POP3"-Verfahrens aus Sicherheitsgründen abzuraten.

Für Verbindungen zu POP3-Servern kann das APOP-Verfahren verwendet werden. Um die Verwendung eines bestimmten Login-Verfahrens zu erzwingen kann dem Passwort der Name des jeweiligen Verfahrens, gefolgt von einem Doppelpunkt, vorangestellt werden. Zulässige Präfixe sind:

PASS:       Klartext-Passwort
APOP:       POP3-APOP Verfahren
LOGIN:      LOGIN-Verfahren (Klartext)
PLAIN:      SSL-PLAIN-Verfahren (Klartext innerhalb eines SSL-Tunnels)
AUTH:       Auth-Verfahren für SMTP oder POP3 erzwingen
SASL:       SASL-Auth-Verfahren für SMTP oder POP3 erzwingen
CRAM-MD5    CRAM-MD5-Verfahren
CRAM-SHA1   CRAM-SHA1-Verfahren

Achtung! Die Präfixe müssen groß geschrieben werden!

Source: C:\AA\Src20020607\EnHlp\html\faq18qc.htm - (169)


Hamster and secure passwords

Hamster and secure passwords

Translated by ??? YOU ???

von Jürgen Denzler

Was sind sichere Kennwörter?

Unter einem starken Kennwort versteht man eine Zeichenkombination, die einem Angriff durch Raten über sehr lange Zeit stand hält.

Bei einem Wörterbuchangriff versucht ein angreifendes Programm sämtliche Wörter, die irgendwann und irgendwo[1] geschrieben wurden solange, bis es Zugriff erhält oder weitere Scans unterbunden werden. Als Steigerung dazu gibt es den Brute-Force-Angriff, bei dem jede beliebige Zeichenfolge versucht wird.

Wie stark die bislang von Dir benutzen Kennwörter sind, kannst Du mit einem Test auf

https://www.cnlab.ch/pwcheck/ herausfinden[2].

Aus heutiger Sicht gilt eine Zeichenfolge aus 8 Buchstaben, Ziffern und Sonderzeichen als relativ sicher.

Wie kann ich mir ein scheinbar kryptisches Kennwort merken?

IbH&XfdN = Ich benutze Hamster und Xnews für das Nutznetz.

Es ist einfach, wenn Du einen Satz bildest und daraus das Kennwort ableitest.

Auch die berüchtigte Kennwortfrage bei manchen Webaccounts

"Wen hast Du zu erstem Mal geküsst?"

solltest Du nicht mit einem simplen "Manuel(a)" beantworten[3]. Beflügle Deine Phantasie: a9S#bP#mM

Solche Geschichten vergisst man nicht - da braucht man auch keine gelben POST-IT Zettel am Monitor.

[1] vom Namenslexikon über Film, Musik und Reiseführer in jeder
    Sprache und Dialekt

[2] Beachte den Hinweis dort, keine tatsächlich benutzen Kennwörter
    zu verwenden. Falls doch, solltest Du nach dem Test unbedingt
    neu Kennwörter vergeben.

[3] Namen und Geburtstage gelten als besonders unsicher, weil damit
    sogar ein menschlicher Angreifer (sozialer Angriff) Zugang zu
    Deinen Accounts erhalten kann.

Source: C:\AA\Src20020607\EnHlp\html\faq18qd.htm - (170)


Hamster and IMAP-Clients

Hamster and IMAP-Clients

Translated by Obbe-Jan Bakker

Adapted from original German text by Heiko Studt

Hamster now supports IMAP;

For what and how do I use that?

The Hamster has since version 1.3.24.x and/or 2.0 an IMAP4rev1-Server implemented. This allows to read and administer your mailbox with a client which itself supports IMAP. Several clients - even on different computers can access the same folderstructure and can exchange the status of a single mail using the server.

Sofar the theory about IMAP.

In Hamster there is no IMAP-Client implemented, with which you can retrieve mail of other IMAP-servers. Mail from other IMAP-servers must be retrieved using POP3 or be delivered to Hamster directly by SMTP-MX.

Installation:

Configuration -->Accounts & passwords... -->Local accounts:
  Add User
    Name: "test" (and/or: the wanted name)
    Mail(POP3/IMAP+SMTP):
      [X] User has local mailbox, usage by IMAP-Client

Configuration -->Local Server -->IMAP:

    Please enter here the wanted settings

    (See alos the other FAQ's and helpitems)

Recommended settings:

Configuration -->Automation... -->General:

    Automatic start local Server:

        [X] IMAP

Configuration -->Edit special files -->Edit Mail-Score-File

    Add a rule for the handling of the IMAP-account.

Now one can include in the preferred IMAP-Client program the details for the connection to Hamster: 127.0.0.1:143 (general: Binding:Port).

Hamster 2.0 does not fully support IMAP4rev1 as defined in standard RFC2060, i.e. extensions like "Namespace" and some others are not (yet) possible. Until now, it seems like there is no client under Windows, which generally supports these more advanced features.

Tested clients:

Newest version of client program and Hamster
  -Becky! Internet Mail   http://www.rimarts.co.jp  (40 $)       [EN/DE]
  -Outlook Express (6)    http://www.microsoft.com  (free)       [EN/ALL]
  -Pegasus                http://www.pmail.com      (free)       [EN/DE/FR/NL]

Older versions of Hamster
  -Eudora                 http://www.eudora.com     (free/ad/pay)[EN]
  -Mozilla                http://www.mozilla.org    (free)       [EN/ALL]
  -Netscape               http://www.netscape.com   (free)       [EN/ALL]

Tested very long ago:
  -Pine    (CygWin tested)
  -The Bat (Until now no 'real' IMAP-support)

Known bugs:

  -Becky reports a wrong unread-number.
     Workaround: Delete the Status.dat in the appropriate (sub)-folder of the mailbox
  -If there is an attachment >200Kb in a sub-mailbox it is not possible to open
     this sub-mailbox with Pegatus, that is, it appears there is no mail.

Version 1.3.23.210
  -Hamster-Log-Warning: Boundary not found
     Ignore this, it occurs rarely.

Source: C:\AA\Src20020607\EnHlp\html\faq18qe.htm - (171)


Hamster.ini [Directories]

File: %main Path%\Hamster.ini Section [Directories]

Translated by Heiko Studt and Obbe-Jan Bakker

Optional section: [Directories]

In this section it's possible to configure the tree of Hamster's folders freely. All these paths are also available in Hamsterscript. So there is no need to use hardcoded full paths in scripts. It's good programming practice to avoind the use of hardcoded full paths as much as possible.

Note! Changing these paths from the defaults might affect the proper functioning of some older tools and/or scripts.

Item-name	Default-value	Script-function	ty pe	me nu	Description
Main	path to Hamster.exe	HamPath	S	-	Set this setting only if you want to use more than one Hamster.exe (eg as programmer) on the same database. For normal use this setting isn't useful.
The path for "Main" must be an absolute path. All other paths can be set as absolute path or as path relative to the Main hamster-path. The default-values are all relative paths to subfolders of the Main hamster-path.

Server	Server	HamServerPath	S	-	path to the server-folders
Groups	Groups	HamGroupsPath	S	-	path to the groups-folders
News.Out	groups/news.out	HamNewsOutPath	S	-	path for outgoing news-articles
News.Err	groups/news.err	HamNewsErrPath	S	-	path for news-articles that can not be posted
Mails	mails	HamMailPath	S	-	path to the mail-folders
Mail.Out	mails/mail.out	HamMailsOutPath	S	-	path for outgoing e-mail
Logs	logs	HamLogsPath	S	-	path to the logfiles
Scripts		HamHscPath	S	X	search-path for scripts (*.hsc)
Modules		HamHsmPath	S	X	search-path for script-modules (*.hsm)
ScriptsRC		HamRCPath	S	X	search-path for remote control scripts (*.hsc)

Examples:
    Main=C:\Program Files\Hamster
    Mails=..\mail-folder\hamster
    Mails=C:\datas\hamster\mails\
    Scripts=Hsc
    Modules=Hsm

Source: C:\AA\Src20020607\EnHlp\html\file41o0.htm - (172)


Hamster.ini [Setup]

File: %main Path%\Hamster.ini Section [Setup]

Translated by Heiko Studt and Obbe-Jan Bakker

Section: [Setup]

Item-name	def val	ty pe	me nu	Description
[Setup] ESSENTIAL SETTINGS [Setup]

password.codebase	0	I	B	Sets the 'Encryption base' for the storage of passwords in Hamster. Permitted values are:     0 = Username and system-info     1 = Use only system-info (OS, Computer), but not Username     2 = No use of system-info, User or so With setting "2" the password-file can be used on every computer.
Attention!, changing the 'Encryption base' setting requires that all password must be re-entered including the passwords for all servers and also requires a restart of Hamster.

internalgroup.default internalgroup.postok internalgroup.posterrors internalgroup.statistics internalgroup.cancelnotify internalgroup.newgroups internalgroup.unknowngroup internalgroup.pullerrors	** ** ** ** ** ** ** **	S S S S S S S S	X X X X X X X X	Defines the names of Hamster-internal groups:     .default : used for all functions if no other name is given     .postok : report articles which were posted successfully     .posterrors : report articles which failed on posting     .statistics : daily group-statistics     .cancelnotify: notifications for cancels in local groups     .newgroups : report new newsgroups     .unknowngroup: container for articles with unknown groups;     .pullerrors : report pull-errors (e.g. outdated groups) ** default for all internal groups: "internal.misc"
[Setup] STARTUP/SHUTDOWN SETTINGS [Setup]

startup.splash	1	B	X	En-/Disable(1/0) show the Hamster splash-screen.
startup.hide	0	B	X	En-/Disable(1/0) start Hamster as icon.
startup.oleserver	1	B	X	En-/Disable(1/0) start of the DCOM server (OLE) when Hamster starts. Note! The commandline tool ham.exe will needs this server to be active.
local.autostart.smtp local.autostart.pop3 local.autostart.nntp local.autostart.IMAP local.autostart.reco	1 1 1 0 0	B B B B B	X X X X X	En-/Disable(1/0) start local mail server (SMTP) when Hamster starts. En-/Disable(1/0) start local mail server (POP3) when Hamster starts. En-/Disable(1/0) start local news server (NNTP) when Hamster starts. En-/Disable(1/0) start local imap server (IMAP) when Hamster starts. En-/Disable(1/0) start local REmote COntrol server when Hamster starts.
CheckDirs.daily	1	B	X	En-/Disable checking for obsolete directories on startup.
main.AskIfOutboxNotEmpty	0	B	X	Should Hamster ask before close, if there is mail/news to be send (outbox)?
[Setup] VISUAL SETTINGS [Setup]

Main.HideMenuItems		B	X	To hide menuitems in the mainwindow, enter these separated by commas: Main.HideMenuItems=Menuitem,Menuitem,... .
You must use the internal names of the menus, which you can find in the language-files (hamster_xx.dat) [THamsterMainWindow/Form] MI.Menuitem=...), the "MI." must be stripped.
Example: Main.HideMenuItems=mnuFileRebuildGlobalLists, mnuFilePurge, mnuFileRebuild

Script.Listbox.Height	220	I	-	Height of a hs2-listbox in pixels.
config.local.treefull	1	B	X	This config-switch allows you to autoexpand the treeview in "Configuration | local servers & accounts | local accounts". If you have many users, you should disable it.
AdvancedConfiguration	0	B	X	En-/Disable(1/0) the setting for advanced configuration. In disabled state Hamster the more complex, advanced features of Hamster are disabled, cq hidden from the user.
editor.app editor.params	** %1	S S	X X	Defines the editor to use for editing textfiles, like scripts and modules. The name incl. optional location (path) of the editor program. The command-line for the editor, where "%1" is replaced by the filename. ** default: notepad.exe with parameter "%1"
- In addition to the default-editor you can define different editors for special file-extensions:
syntax: Editor[.ext].app=...
Editor[.ext].param=...
To use a seperate editor for all ".msg"-files you have to set entries as in the following item.

Editor.msg.app Editor.msg.params		S S	X X	Example for separate editor for *.msg files. The name incl. optional location (path) of the editor program. The command-line for the editor, where "%1" is replaced by the filename. For all other extensions the default-editor will be used.
log.FormatFileName		S	-	Defines the filename-scheme for the logfiles of Hamster. The format-string must contain an "%d" or "%.xd" as wildcard for the current number where x stands for the width of the number. Example: log.FormatFileName=Ham_%.4d.log
log.file.max log.view.max	14 500	I I	X X	Maximum number of lines to view in log-window. Maximum number of logfiles to store on disk.
log.file.mask log.view.mask log.thread.mask	C8C0 C880 C8C4	S S S	X X -	Mask-hex-string sets entries to be saved to logfile. Mask-hex-string sets entries to be viewed in logwindow. Mask-hex-string sets entries to be viewed in threadwindow.
log.file.refresh	5	I	X	Refresh rate for the log-display in 0.1 seconds (default 0.5 sec).
main.minimizeonclose	0	B	X	This setting defines how Hamster reacts to the close-window command. Default Hamster will stop when closed. If enabled Hamster will keep running minimized when closed. "File | Exit" will still stop Hamster.
main.autoactivateerrorlog	0	B	X	En-/Disable(1/0) the auto-activation of the Tab "Warnings & Errors" after first Warning/Error.
CreateStatistics.daily	1	B	X	En-/Disable(1/0) create statistics every day.
[Setup] LIMIT SETTINGS [Setup]

MaxScriptPWNumber	30	I	X	Set the maximum number of password-placeholders for use in scripts.
MaxTasks	0	I	X	Maximum number of simultaneous threads for email and news.
pull.limit.first pull.limit	100 -100	I I	X X	General limit (number of articles) for pulling news. General limit for pulling news for a new (empty) group. These settings can be overruled per group. number < 0 : pull only the xxx newest articles 0 : no limit number > 0 : pull only the xxx oldest articles
MaxUnknownGroupsInRe	2	I	-	This defines, how much unknown groups are allowed in a crossposting without F'up2 for answers. The default is 2, values higher than 10 are ignored.
news.makeparts	0	B	X	Should Hamster load Overviews in parts? If you want to load bigger newsgroups (>2000 articles per load) or if you have an expensive and small bandwith, it's important
news.sizeofparts.min	250	I	X	If news.makeparts=true, how big have the overview to be to make parts?
news.sizeofparts.max	300	I	X	If news.makeparts=true, how big should the normal part of overview?
local.limit.linelen.nntp local.limit.linelen.pop3 local.limit.linelen.smtp local.limit.linelen.imap (?) local.limit.linelen.reco (?) local.limit.textsize.nntp local.limit.textsize.pop3 local.limit.textsize.smtp local.limit.textsize.imap local.limit.textsize.reco (?)	1000 1000 1000 1000 1000 ** ** ** ** **	I I I I I I I I I I	- - - - - - - - - -	Limits for line-length and text-size of messages sent to one of Hamster's local servers. If one of the limits is exceeded, the connection will be terminated (default: 1000/2MB; 0 to disable). These limits can be set for each protocol separately.   See also the FAQ Hamster and large e-mail   ** default for local.limit.linelength.* : 1000 lines, set to 0 to disable. ** default for local.limit.textsize.* : 2097152 bytes = 2MB, set to 0 to disable.
MaxLocalNNTPServersPerIP MaxLocalSMTPServersPerIP MaxLocalPOP3ServersPerIP MaxLocalIMAPServersPerIP MaxLocalRECOServersPerIP	6 3 5 10 1	I I I I I	X X X X X	Limit the number of simultaneous connections from one IP to a local server. Separate limits can be set for each type of local server. Set to 0 for no limit per IP (general limit in next item still applies). Values larger then the common limit (next item) makes no sense.
MaxLocalNNTPServers MaxLocalSMTPServers MaxLocalPOP3Servers MaxLocalIMAPServers MaxLocalRECOServers	12 3 10 10 1	I  I I I I	X  X X X X	Limit the total number of simultaneous connections to a local server. Different limits can be set for each type of local server. Set to 0 for no limit (NOT recommened!).
[Setup] SCORE AND PURGE SETTINGS [Setup]

purge.daily	0	B	X	En-/Disable(1/0) if Hamster once a day on startup automatically starts purge.
purge.lastdailypurge		I	-	Date of the last automatic purge on startup of Hamster. format=<latest purge-date as yyyymmdd>
purge.mhistory.keepdays	14	I	X	Number of days to keep entries in the mail-history.
purge.articles.keepdays	7	I	X	Number of days to keep articles in the newsgroups.
purge.history.keepdays	7	I	X	Number of days to keep articles (MID) in the news-history.
purge.kills.keepdays	7	I	X	Number of days to keep articles (XOver) in the killfile-log.
PurgeMailScorefile.daily PurgeNewsScorefile.daily	1 1	B B	X X	En-/Disable(1/0) test the mail-score-file for expired entries once a day. En-/Disable(1/0) test the news-score-file for expired entries once a day.
score.RetrieveThread.expire	14	I	-	Expire period in days for Retrieve-Thread-entries in the news-scorefile.
score.DeleteThread.expire	14	I	-	Expire period in days for Delete-Thread-entries in the news-scorefile.
Expired entries will be deleted or commented out ruled by the next items.
When set for delete (1) an expired entry will be deleted from the score-file else the entry will be converted to comments.
This is done by adding prefix "# Expired! # " to the original line. Both delete and comment out are reported in the log.

News.ScoreFile.     ExpiredEntries.Delete Mail.ScoreFile.     ExpiredEntries.Delete	0   0	B   B	-   -	Delete or Comment out (1/0) expired entries in the news-score-file.   Delete or Comment out (1/0) expired entries in the mail-score-file.
purge.mailinlog.keeplines purge.mailoutlog.keeplines purge.newsoutlog.keeplines purge.rasdiallog.keeplines	0 0 0 0	I I I I	X X X X	Every log-file can be set to limit the size to a maximum number of lines. If size exceeds limit purging will delete the oldest lines (0=no purge). Setting for purge of logfile "MailIn.log". Setting for purge of logfile "MailOut.log". Setting for purge of logfile "NewsOut.log". Setting for purge of logfile "RasDial.log".
mail.filter.mailsize.ignore mail.filter.mailsize.delete mail.filter.mailsize.notify	0 0 0	I I I	X X X	Global filters for incoming mail based on the size of the messages as reported by initial LIST-command. You can set separate limits (bytes) to ignore, kill or notify admin based on mailsize. Set to 0 for no limit. These filters have a higher priority than the filters defined in the mail-score-file "MailFilt.hst". If mailsize exceeds this delete the mail. ( 0 = no limit, receive). If mailsize exceeds this ignore the mail. ( 0 = no limit, receive). If mailsize exceeds this send notification to admin. ( 0 = no notify).
mail.filter.toplines	20	I	-	Number of preview-lines of mailmessage to load when retrieving headers for the mailfilter. These lines are used for scoring (mail filter) and are also included in notification-messages to admin when ignoring or killing mail.
score.loglimit	-9999	I	X	Articles with a score of less than this setting are not logged in killfile-log. default: -9999, i.e. log all
score.DeleteThread.section	[*]	S	-	The section in scorefile, where the entry is written to after deleting a thread in KillLog. The surrounding brackets "[" and "]" are required.
score.DeleteThread.value	-9999	I	-	Which value should be written into the scorefile, if a thread is deleted in killog. The char "=" can be used.
score.RetrieveThread.section	[*]	S	-	The section in scorefile, where the entry is written to after retrieving a thread in Killog. The surrounding brackets "[" and "]" are required.
score.RetrieveThread.value	+9999	I	-	Which value should be written into the scorefile, if a thread is reloaded in killog. The char "=" can be used.
[Setup] TIMEOUT SETTINGS [Setup]

local.NNTP.timeout.login local.SMTP.timeout.login local.POP3.timeout.login local.IMAP.timeout.login local.ReCo.timeout.login	10000 10000 10000 10000 10000	I I I I I	- X X X X	Timeperiod in milliseconds after the initial connection to a local server has been made in which the user must authenticate or else will be disconnected. This timeout-period can be set separate for each server type.
local.timeout.inactivity	15	I	-	Timeout in minutes after which the local-servers disconnect clients without activity.
local.timeout.quitdelay	100	I	-	Time in milliseconds for which Hamster waits before closing a connection after QUIT-command.
local.smtpafterpop3.period	300	I	-	Period in seconds, for which the client may wait between POP3-access (valid authentication) and SMTP-access by SMTP-after-POP3.
Remote.Timeout.Connect Remote.Timeout.Command	120 120	I I	X X	Timeout in seconds for the remote server, that is the timewindow in which the remote server has to answer (when connecting/after sending a command) before a 'no response from server' is assumed.
[Setup] MID-FQDN SETTINGS [Setup]

news2mail.MIDExtension	**	S	-	NNTP: To avoid same message-ID if you post an article in normal and gateway-groups, message-IDs of gateway-articles are extended at the beginning. With this item this extension can be changed. If the value is empty, the function is disabled and the message-ID won't be changed. ** default: n2m-g.
local.mail.LocalMIDFQDN	1	B	X	Yes/No(1/0) Message-ID-FQDN is a local domain. If the FQDN for message-IDs is no local domain, it can be excluded for the check, if an mail-address is local or not.
FQDN		S	X	Here you have to write to the FQDN for the "domain part" (after the '@') of the Message-ID, if Hamster should generate one. The Message-IDs have to be unique for years. Same MIDs can cause to real damage to older systems. So you *MUST NOT* conceive a FQDN yourself. You need an own domain or you have to get a subdomain by a provider or another domain-owner. For free you can get FQDNs (e.g.) at http://www.th-h.de/fqdn or any dynamic-dns provider e.g. http://www.dyndns.org/.
FQDN2		S	X	Here the FQDN for Path: and Received: header should written to, if Hamster should generate them. This entry is also used for the welcome-message when a client connects to Hamster.
mid.crypt	0	B	X	En-/Disable(1/0) the encryption of the local-parts of the Message-ID for news. (There were Cancels against special Hamster...)
mail.removemids		S	-	Remove Message-ID from mails sent to local SMTP-server if its FQDN is one of those in this comma-separated list: This permits to remove incorrect message-ids generated by mailreader programs. A similar mechanism for news postings is not supported for reasons of security (duplicates). Example: mail.removemids=fqdn1,fqdn2,fqdn3,...
generate.MID	0	B	X	En-/Disable generating a Message-ID for news, if no Message-ID is set.
mail.generate.MID	0	B	X	En-/Disable generating a Message-ID for mail, if no Message-ID is set.
news.number.lastused mail.number.lastused		I I	- -	Number of the last news-message. Number of the last mail-message.
news.ext.in news.ext.out mail.ext.in mail.ext.out	msg msg msg msg	S S S S	- - - -	File-extension for incoming news-messages. File-extension for outgoing news-messages. File-extension for incoming mail-messages. File-extension for outgoing mail-messages.
[Setup] LOCAL SERVER SETTINGS [Setup]

local.port.nntp local.port.smtp local.port.pop3 local.port.imap local.port.reco	119 25 110 143 23	I I I I I	X X X X X	TCP-Port for the local news server (NNTP) TCP-Port for the local mail server (SMTP) TCP-Port for the local mail server (POP3) TCP-Port for the local imap server (IMAP) TCP-Port for the local REmote COntrol server (RECO)
local.nntp.tlsmode local.smtp.tlsmode local.pop3.tlsmode local.imap.tlsmode	0 0 0 0	I I I I	X X X X	Set if local server use SSL on local server, seperate for all server types. Permitted values are: 0 : Disable TLS 1 : Enable TLS, use if supported by client. 2 : Require TLS, login without TLS is not possible
local.reco.usetls	0	B	X	En-/Disable(1/0) use ReCoServer with SSL (ReCoServer on SSL-Port).
local.nntp.XOVERdelCRLF	1	B	-	This setting decides, what happens to CR/LF in headers. If "0", they are converted to spaces, if "1" they are removed. "1" is highly recommend if using Forte Agent or XNews, because they get the subject from the XOver and includes false spaces in such cases.
local.mail.     BounceIfUnknownUser	0	B	X	En-/Disable(1/0) bounce mail addressed to unknown local user instead of sending to default-user.
local.mail.reqnotauth	0	B	X	Configuration/local server/SMTP: You can allow, that mail to local receipients doesn't need authentication, although SMTP-AUTH is activated. This helps to avoid unwished Relaying when the SMTP-server can be used from internet.
local.nntp.serverbind local.smtp.serverbind local.pop3.serverbind local.imap.serverbind local.reco.serverbind	** ** ** ** **	S S S S S	X X X X X	Here the local server from Hamster can be bound to a specific network interface. The default is the IP-address 127.0.0.1. If the local servers of Hamster must be available in a local network, this value must be changed to the IP-address of the network-card or to the IP-address 0.0.0.0 (that is all available ip's). Attention, these settings are security-related! ** default for all bindings : 127.0.0.1
local.list.require.auth	1	B	-	By this entry you determine if the local NNTP-command "LIST" requires login by username and password. Warning! If you don't know what this is, it should be 1 (true). It could cause security holes!
local.nntp.infomail	1	B	-	En-/Disable sending a error-notification to the newsmaster if hamster could not post an news-article to Usenet.
local.usenet	admin	S	-	Standard account for the newsmaster of Hamster.
local.postmaster	admin	S	-	Standard acount for the postmaster of Hamster.
local.smtp.sasl local.pop3.sasl local.reco.sasl	** ** **	S S S	X X X	Defines the SASL mechanisms (RFC 2222) which may be used to authenticate a client on the local server. Supported mechanisms are: LOGIN, PLAIN, CRAM-MD5, CRAM-SHA1 ** default: LOGIN PLAIN CRAM-MD5 CRAM-SHA1 ** default: LOGIN PLAIN CRAM-MD5 CRAM-SHA1 ** default: LOGIN PLAIN CRAM-MD5 CRAM-SHA1
local.mail.islocaldomain	**	S	X	Local mail-delivery, if domain-part of recipient matches this regular expression. ** default: .*hamster|\[?127\.0\.0\.1\]?|.*invalid
local.authreq.smtp	0	B	X	En-/Disable authentication with SMTP-after-POP3.
local.authreq.esmtp	0	B	X	En-/Disable authentication with SMTP-AUTH.
local.nntp.posttounknown	0	B	X	En-/Disable allow news POST with unknown groups.
local.nntp.     SearchUnknownMIDs	1	B	X	En-/Disable the automatic request-by-mid for news messages unavailable in Hamster. If a client search an Message-ID which is not in the news-history, Hamster adds the Message-IDs directly to all "GetMids.txt"-files for all NNTP-servers.
[Setup] NEWS-NNTP SETTINGS [Setup]

preferred.postserver		S	X	Default NNTP-server, which will be used for outgoing news.
nntp.autogetserverinfos	1	B	X	En-/Disable the automatic check for newsserverinfo (new groups) which is default combined with pulling news.
FilterNewGroupsInfo	.*	S	X	Information about new groups (info posts) can be limited, filtered with this regular expression. Example: Limit the 'new groups' to the hierarchies "en.ALL" and "hamster.ALL": FilterNewGroupsInfo=^(en|hamster)\.
nntp.dropresidualjobs	1	B	X	If all threads for a newsserver fail there can be remaining jobs for this server in the job-list. En-/Disable(1/0) the automatic removal of these remaining jobs from the job-list.
news.localinjection	0	B	X	Activate the direct save of posted articles to groups. Warning! It's also for non-local groups!
news.addpath	0	B	X	En-/Disable if Hamster saves the FQDN (if available) into the Path-Header for news articles posted to the local server.
news.addxhamster	0	B	-	En-/Disable(1/0) Hamster's "X-Posting-Agent:"-Header for news.
AddUserAgent	1	B	X	En-/Disable(1/0) Hamster's "User-Agent:"-Header for news.
news.addxhtrace		B	-	Defines the name of a X-Trace-Header, which is added to posted articles.
The content of such a trace-header consists of the following values:
FQDN/localhost, time, thread-id, client's IP, user-id, thread-id (hex), date-str., time-str.
If the posted article already contains such a header, the article will not be rejected, but the existing header will be renamed to 'X-Old-...'. Default is empty, i.e. don't add such a trace-header.
e.g.: news.addxhtrace=X-Hamster-Trace
-> X-Hamster-Trace: x.y.z 963151230 236 127.0.0.1 (1 ec 2000.07.09 14:00:30)

Cancels and supersedes from incoming news can be executed automatically, Cancels and supersedes in local groups are always executed, if sender/from of cancel-message is equal to sender/from of cancelled message.
The following cancel-settings are for postings feeded from external servers.

news.feededcancel news.feededsupersedes news.feededcanceldelete	0 0 0	B B B	X X X	Allow/Deny(1/0) execute cancels ("Control Cancel <MID>") Allow/Deny(1/0) execute supersedes ("Supersedes: <MID>") Allow/Deny(1/0) delete of cancel-messages after execution.
news.feededcancelverify	1	B	X	Yes/No(1/0) cancel only after verification that the sender/from-headers of the cancel-message are equal to sender/from of the cancelled message.
news.   feededcancelcontrolmsg	0	B	X	En-/Disable(1/0) cancel article also if the original article is a control message. Attention: Enabling this can cause "evidence" to be deleted.
[Setup] CRAPPY READER SETTINGS [Setup]

Log.IgnoreConnectionLost	0	B	-	En-/Disable if Hamster hides the warning "Connection lost", which is produced by badly written client-software like Outlook Express. This workaround just hides these messages.
pop3.delay smtp.delay imap.delay	0 0 0	I I I	- - -	Here you can set a time delay in milliseconds before the local server sends its answers. This is a workaround for an error in Outlook XP clients.
[Setup] MAIL-POP3 SETTINGS [Setup]

preferred.smtpserver		S	X	Default SMTP-server, which will be used for outgoing mail.
mail.leaveonserver	1	B	X	Yes/No(1/0) leave mail on server instead of deleting it, after retrieving mail.
DefaultEnvelopeFrom	admin	S	X	Address for automatically generated e-mail.
mail.   GateUseHamsterEnvelope	1	B	X	Yes/No(1/0) Set Envelope-From to Default-Hamster-From instead of Mail-From-Header in the Mail to News Gateway. 1 = Use the internal Hamster e-mail-address from menu “Local Server|General“ for the envelope. 0 = Use the From:-header from the news-article for the Envelope-From:-header.
mail.flupforgate	1	B	X	Yes/No(1/0) Set Header "Follow-Up-To-Poster" for converted mail in the Mail to News Gateway.
SendInfoMailLocalOnly	1	B	X	Yes/No(1/0) send all errormessages of Hamster (info-mail) always only local to the admin (default). With 0 the info-mail can be send to an external address.
mail.addxhamster	1	B	X	En-/Disable(1/0) Hamster's "X-Posting-Agent:"-Header for mail.
mail.addreceived	1	B	X	En-/Disable(1/0) Hamster's "Received:"-Header for mail.
mail.filterbyuidl	0	B	X	En-/Disable(1/0) ignore of already loaded mail, i.e. do not load again.
sendmail.attempts.max	3	I	X	If sending of a mail to an external SMTP-server fails for any reason, Hamster tries it again later for a maximal number of times. Finally, the undeliverable mail-file is either renamed to "*.err" or deleted to avoid further attempts. The action taken can be set with the next item.
sendmail.attempts.del	0	B	X	Action by Hamster, in case the mail could not be send within the maximum number of retries. 0 = rename, 1 = delete
pop3.addreceived	1	B	X	En-/Disable generating (adding) a "received:"-header when pulling mail from an external POP3-server.
IMAP.SASL.LOGINDisable	0	B	X	Yes/No(1/0) disable special authentication method SASL for the local IMAP-server.
IMAP.LOGINDisable	0	B	X	Yes/No(1/0) disable special authentication method LOGIN for the local IMAP-server.
[Setup] IHAVE-PEER SETTINGS [Setup]

ihave.auth	1	B	-	En-/Disable require authentication to use the IHAVE-command.  WARNING! By switching this off there is a security leak!
local.nntp.checkpath	1	B	-	En-/Disable check for existing path in incoming articles (Feed).
local.nntp.feedjunk	0	B	-	Enable this setting will allows feeding of articles from groups, which are unknown to importing Hamster. These articles are sorted in the internal group for postings with unknown newsgroups-header.
nntp.ModeReader	1	B	-	En-/Disable if Hamster's Hamster's NNTP Client sends the "MODE READER"-command.
stream.mode	0	B	-	En-/Disable stream mode for peering.
[Setup] OTHER SETTINGS [Setup]

history.chunkbits	4	I	-	The history-file is splitted in multiple files and this setting controls, how many files are used ("0"=1 file, "2"=4 files, ..., "8"=256 files). The default of "4" results in 2^4=16 files, which should be OK for most cases.
To change the number of files used for history (NOT recommended for installations with less than 100.000-200.000 articles):
  1. close Hamster
  2. change "history-chunkbits"-setting
  3. delete "hist*.dat" in "groups"-directory
  4. start Hamster to (automatically) rebuild the history file

ComServername	**	S	-	Set a different name for the DCOM-server (OLE-server). This can be useful when running two Hamsters. ** internal default: Hamster
StartUp.ScriptTimeout	30000	I	-	Setting for timeout in millisec. when handing over parameters from a script to a running hamster. Set to 0 for no timeout (Default 30000 = 30s).
Language	en	S	X	The setting for which language (file: hamster_??.dat) will be used by Hamster. Hamster is delivered with at least English and German files.
Language.Update.en.dat	0	B	-	Update of language-file hamster_en.dat If enabled the English language-file hamster_en.dat will be updated automatically when using Hamster. Hamster.ini / [Setup] / Language.Update.en.dat=1 =>Hamster_en.dat is updated, too. The update-process can be configured with settings in the language-file itself. See header of file "hamster_en.dat" for more details.
[Setup] OBSOLETE SETTINGS [Setup]

All items below are obsolete, no longer used.
Advice is to remove these from the ini-file (if present) to avoid confusion with similar new items.

DefaultScriptLanguage	2	I	**	Which version of Hamster-scripts should be used without deklaration? 0=no; 1=HS1; 2=HS2 Warning! HS1 won't be enhanced anymore! ** Obsolete, this item is no longer used and can be removed.
Language.cached	1	B	**	Chaching the language-packs? 1: It's loaded only at Hamster-start or on changing language. 0: (for programmers and translators): It's loaded whenever something is needed. If something isn't there it's saved automatically in the ini. ** Obsolete, this item is no longer used and can be removed.
local.port.nntps local.port.pop3s local.port.smtps	563 995 465	I I I	** ** **	Standard ports of local SSL-servers ** Obsolete, this item is no longer used and can be removed.
ssl.port.pop3s ssl.port.smtps ssl.port.nntps	5000 4650 5630	I I I	** ** **	local SSL-Standardports for mapped remoted server of your provider. Note: If more than one server should be contacted by SSL, you have to write other port-numbers to their server.ini. ** Obsolete, this item is no longer used and can be removed.
news.verifycancel (?)	?	B	?	Compare sender/from of cancel/supersedes-message with the sender/from of cancelled message.
local.authreq.closeiffalse	1	B	-	It seems this item is no longer used, although still available in sources.
Source: C:\AA\Src20020607\EnHlp\html\file41ps.htm - (173)


Hamster.ini [Main]

File: %main Path%\Hamster.ini Section [Main]

Translated by Heiko Studt and Obbe-Jan Bakker

Section: [Main]

Item-name	default value	ty pe	me nu	Description
Title	**	S	-	Set the title for the Hamster main window. Supported 'variables' are described below. ** default: %Hamster% V%Version% %Readonly% example: Classic Hamster V1.3.23.205 [ReadOnly]
TaskbarTitle	**	S	-	Set the caption of the taskbar entry for Hamster (available when the Hamster main window is open). Supported 'variables' are described below. ** default: Hamster
Supported 'variables' (wildcards, placeholders) for Title and TaskbarTitle are:

· %Hamster% for product name, default: "Classic Hamster"
· %Version% for version number, example: "1.3.23.205"
· %ReadOnly% for read-only-mode,default: ""

The values for %Hamster% and %Version% are taken from hamster.exe.
The value for %ReadOnly% is empty or used from the language-file. See also Hamsterscripts: call by Command Line

State Left Top Width Height		I I I I I	X X X X X	Settings for the browserwindow, are saved on close.
Tab		I	X	Last active tab/page on the main window, saved on close.
ShowShell	0	N	X	Determines if a hs2-shell for direct input of single-line script-commands appears on the main-window. Possible values are:     0 = No hs2-shell     1 = Show shell at top of window     2 = Show shell at bottom of window
ShellHist.Log	1	B	-	En-/Disable saving the history of the hs2-shell.
Logs.ShowHints	1	B	-	Set Logs.ShowHints=0 to deactivate the hints when moving the mouse over the log-file in the main window.
ColoredTabs	1	B	-	Determines if the tab for "warnings & errors" should be colored. If set to 1 the tab for "warnings & errors" will be colored when errors and/or warnings are logged. In case of errors the colors set for errors will be used else the colors set for warnings. These colors can be changed with the settings below.  Note! These settings are only for the tab, not for the log itself.
TabColorErrorText TabColorErrorBrush TabColorWarningText TabColorWarningBrush	clWhite clRed clBlack clYellow	S S S S	- - - -	Set the color used for text in tab "warnings & errors" if there are errors. Set the color used as background in this tab if there are errors. Set the color used for text in this tab if there are only warnings. Set the color used as background in this tab if there are only warnings.

The following part describes the settings for the colors in the logfile itself. These same colors are also used in the settings for the visual log and the logfiles. The item names have the following syntax: color.xxx.yyy Hereby is xxx one of the line-types debug, detail, info, system, warning and error. And yyy is one of the types text (foregroundcolor) and brush (backgroundcolor). A special value for xxx is 'else', meaning the colors for empty log lines. Invalid colors will be reported in the log.
Colors can be entered as Delphi color name or as hex-value. See color for more details.

color.debug.text color.debug.brush	clLtGray clWhite	S S	- -	Set the color used for text in debug lines in the log window. Set the color used as background in debug lines in the log window.
color.detail.text color.detail.brush	clBlack clWhite	S S	- -	Set the color used for text in detail lines in the log window. Set the color used as background in detail lines in the log window.
color.info.text color.info.brush	clBlack clWhite	S S	- -	Set the color used for text in info lines in the log window. Set the color used as background in info lines in the log window.
color.system.text color.system.brush	clWhite clBlue	S S	- -	Set the color used for text in system lines in the log window. Set the color used as background in system lines in the log window.
color.warning.text color.warning.brush	clBlack clYellow	S S	- -	Set the color used for text in warning lines in the log window. Set the color used as background in warning lines in the log window.
color.error.text color.error.brush	clWhite clRed	S S	- -	Set the color used for text in error lines in the log window. Set the color used as background in error lines in the log window.
color.else.text color.else.brush	clBlack clLtGray	S S	- -	Set the color used for text in empty log lines in the log window. Set the color used as background in empty log lines in the log window.
BottomlineFormat	**	S	-	Set the status information for the bottom line of the main window (statusline). Supported 'variables' are described below. ** default:  Tasks/Jobs=%TA/%JO   OutBox: N/M=%NO/%MO   News=%NI (Load=%NL History=%NH Kill=%NK)   Mail=%MI   Bytes=%BY
HintFormat	**	S	-	Set the information reported in the hint text of the icon in system tray. Supported 'variables' are described below. ** default:  Tasks/Jobs=%TA/%JO,  N/M=%NO/%MO,  Arts=%NI,  Mail=%MI
Supported 'variables' (wildcards, placeholders) for statusline and tray-icon hint are:

· %TA Number of active tasks
· %JO Number of remaining tasks
· %NO Number of newsmessages to post (News.Out)
· %MO Number of mail to send (Mail.Out)
· %NI Number of new news articles (News In, %NI=%NL+%NH+%NK+%NM)
· %NL Number of new news articles loaded
· %NM Number of articles loaded by message-id (MID)
· %NH Number of news articles ignored due to history
· %NK Number of news articles not loaded (killed) due to scoring
· %MI Number of new mail loaded
· %BY Number of bytes transfered
· %KB Number of Kilobytes transfered (Kb)
· %M:<username>% Number of mail in the mailbox for user <username>

Self-defined statusline variables:

· %X0 Placeholder 0, variable for free use (no special meaning).
· ... ...
· %X9 Placeholder 9, variable for free use (no special meaning).

Besides the variables for statusline with fixed meaning there are variables available without special meaning.
These can be shown in the statusline of Hamster with the wildcards %X0 to %X9.
These variables can be used in hs2 and in DCOM/COM-interfaces.
Example: Such a counter can be used as progress-indicator of a running script.
There are several functions available for use and maintenance of these variables.
See Hamsterscripts: Functions (general) | Miscellaneous functions | XCounter for details.

Source: C:\AA\Src20020607\EnHlp\html\file41rk.htm - (174)


Hamster.ini [Actions]

File: %main Path%\Hamster.ini Section [Actions]

Translated by Heiko Studt and Obbe-Jan Bakker

Optional section: [Actions]

Actions in Hamster make it possible to intervene at specific points in the program-flow of Hamster. At these points an external program and/or hamsterscript can be run automatically. The configuration of these actions can be done directly into the hamster.ini. Advice is however to use the appropriate menu in "Configuration | Automation | tab: Actions".
A detailed description of the structure and syntax of actions is available at Hamsterscripts: Call by action

Item-name	def val	ty pe	me nu	Description
Timeout.ExecInit	60	I	-	Timeout (in seconds) for initialization of external programs, called by "Actions".
Timeout.ExecRun	180	I	-	Timeout (in seconds) for termination of external programs, called by "Actions".
The timeout settings are used for all "Actions". Use value 0 to disable timeout-checking, that is, use 0 for "infinite" timeout.
Note! Use 0 ("infinite") only if it can not be avoided. An "infinite" wait may take a looooong time! :-)

Hamster actions: startup, shutdown

startup.exec startup.pars startup.script startup.wait startup.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when Hamster is started and initialized. No parameters are used.
shutdown.exec shutdown.pars shutdown.script shutdown.wait shutdown.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when Hamster is closed, if you don't choose "wait", Hamster can be terminated, before the action is done. No parameters are used.

statusline actions: click, doubleclick

status.click.exec status.click.pars status.click.script status.click.wait status.click.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user clicks on the statusline, so it is also executed on an double-click! No parameters are used.
status.doubleclick.exec status.doubleclick.pars status.doubleclick.script status.doubleclick.wait status.doubleclick.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user double-clicks on the statusline. If there's no action defined, Hamster opens the dialog with the mail/news-directories. No parameters are used.

trayicon actions: click, doubleclick, middleclick, middledoubleclick

trayicon.click.exec trayicon.click.pars trayicon.click.script trayicon.click.wait trayicon.click.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user clicks on the tray-icon. If there's no action defined, Hamster activates his main window. No parameters used.
trayicon.doubleclick.exec trayicon.doubleclick.pars trayicon.doubleclick.script trayicon.doubleclick.wait trayicon.doubleclick.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user double-clicks on the tray-icon. No parameters are used.
trayicon.middleclick.exec trayicon.middleclick.pars trayicon.middleclick.script trayicon.middleclick.wait trayicon.middleclick.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user clicks with the middle mousebutton on the tray-icon. No parameters are used.
trayicon.middledoubleclick.exec trayicon.middledoubleclick.pars trayicon.middledoubleclick.script trayicon.middledoubleclick.wait trayicon.middledoubleclick.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user double-clicks with the middle mousebutton on the tray-icon. No parameters used.

news actions: preprocess, general, out, local, gateway

news.preprocess.exec news.preprocess.pars news.preprocess.script news.preprocess.wait news.preprocess.ExeStartType	1 ** 0	S S S I B	X X X ** X	This action is executed first, when a posting is send through hamster, and before Hamster checks if required headers are set, if it's a local posting etc. Parameter contains the filename.   ** 1=Wait is enforced.
news.exec news.pars news.script news.wait news.ExeStartType	1 ** 0	S S S I B	X X X ** X	This general news-action is executed, before the posting is really saved. If a deeper action is defined, too, the general action isn't used. Parameter contains the filename.   ** 1=Wait is enforced.
news.out.exec news.out.pars news.out.script news.out.wait news.out.ExeStartType	0 0	S S S I B	X X X X X	This action is used for postings to external newsservers. Parameter contains the filename.
news.local.exec news.local.pars news.local.script news.local.wait news.local.ExeStartType	1 ** 0	S S S I B	X X X ** X	This action is used for postings to internal groups, Hamster waits always, until the action has executed. Parameter contains the filename.   ** 1=Wait is enforced.
news.gateway.exec news.gateway.pars news.gateway.script news.gateway.wait news.gateway.ExeStartType	1 ** 0	S S S I B	X X X ** X	This action is used for mails, which are converted to local postings. This conversion is done, if a "postto"-rule in the Mailfilt.hst is successfull. Hamster waits always, until the action has executed. Parameter contains the FileName. ** 1=Wait is enforced.

mail actions: general, getheader, in[.account], internal[.account], local[.account], out

mail.exec mail.pars mail.script mail.wait mail.ExeStartType	0 0	S S S I B	X X X X X	This general mail-action is executed for every incoming or outgoing or local mail. If a deeper action is defined, too, then only the special action is used. Parameters contain filename and in some cases the user-account.
Account-specific general action for mail. Syntax: mail.[accountname.]exec ...pars ...script ...wait ...ExeStartType

mail.admin.exec mail.admin.pars		S S	X X	As an example: general action for the admin account.
mail.getheader.exec mail.getheader.pars mail.getheader.script mail.getheader.wait mail.getheader.ExeStartType	1 ** 0	S S S I B	X X X ** X	This action is executed before the Mailfilt.hst is tested, the original headers are saved, Hamster waits for the end of the action, so you can append or modify headers, which are then checked by the Mailfilt.hst. Parameter contains the filename. ** 1=Wait is enforced.
mail.in.exec mail.in.pars mail.in.script mail.in.wait mail.in.ExeStartType	0 0	S S S I B	X X X X X	This action is executed for every incoming Mail (POP3-Server), please be careful, if you change the mail itself not to damage it! Parameters are filename and user-account.
Account-specific action for mail.in. Syntax: mail.in.[accountname.]exec ...pars ...script ...wait ...ExeStartType

mail.in.admin.exec mail.in.admin.pars		S S	X X	As an example: special action for the admin account.
mail.internal.exec mail.internal.pars mail.internal.script mail.internal.wait mail.internal.ExeStartType	0 0	S S S I B	X X X X X	This action is executed for every internal Mail (Info-Mails from Hamster itself). Parameter contains the filename.
Account-specific action for mail.internal. Syntax: mail.internal.[accountname.]exec ...pars ...script ...wait ...ExeStartType

mail.internal.admin.exec mail.internal.admin.pars		S S	X X	As an example: special action for the admin account.
mail.local.exec mail.local.pars mail.local.script mail.local.wait mail.local.ExeStartType	0 0	S S S I B	X X X X X	This action is executed for every Mail to an local account. Parameter contains the filename.
Account-specific action for mail.local. Syntax: mail.local.[accountname.]exec ...pars ...script ...wait ...ExeStartType

mail.local.admin.exec mail.local.admin.pars		S S	X X	As an example: special action for the admin account.
mail.out.exec mail.out.pars mail.out.script mail.out.wait mail.out.ExeStartType	0 0	S S S I B	X X X X X	This action is executed for every Mail to an external mailaddress. Parameter contains the filename.

mixed actions: group.doubleclick

group.doubleclick.exec group.doubleclick.pars group.doubleclick.script group.doubleclick.wait group.doubleclick.ExeStartType	0 0	S S S I B	X X X X X	This action is executed, when the user double-click on a groupname in menu Configuration Newsconfig NewsGroups If not defined, Hamster opens the group-settings. Parameter is the groupname.
Source: C:\AA\Src20020607\EnHlp\html\file41tc.htm - (175)


Hamster.ini [other sections]

File: %main Path%\Hamster.ini (misc sections)

Translated by Heiko Studt and Obbe-Jan Bakker

Section: [Stats]

In this section Hamster stores some settings for statistical propose. These should not be edited normally.

Item-name	def val	ty pe	me nu	Description
LastInfoMsg		S	-	Date of last created info-message created by Hamster, format dd.yy.yyyy.  Example: 03.10.2001
Load	0	I	-	Number of articles loaded, example: 421295
Hist	0	I	-	Number of articles in history, example: 83047
Kill	0	I	-	Number of articles killed, example: 485146
ByMid	0	I	-	Number of articles loaded by MID, example: 137

Section: [Online-Menu]

In this section Hamster stores the data for the user-defined entries in menu "Online".

Item-name	def val	ty pe	me nu	Description (examples)
Title1		S	X	Pull news
Server1		S	X	news.t-online.de,nntp;pssnews.msn.com,nntp
Title2		S	X	Fetch mails from T-Online
Server2		S	X	pop.t-online.de,pop3
...				etc.
Title9		S	X	Title for server 9
Server9		S	X	pop.server9.en,pop3

Section: [Marker]

If there are new groups and the grouplists have to be rebuild this item will be set to 1. There is no need to edit, because Hamster maintains this and this is only the storage. The function "Rebuild Global Lists" can also be started from the menu "File".

Item-name	def val	ty pe	me nu	Description
GlobalList	0	B	-	Indicator for "rebuild global lists", maintained by Hamster itself.

Section: [EditDirs]

In this section Hamster stores the settings for the mail/news-Browser (menu Local)

Item-name	def val	ty pe	me nu	Description
LastDir	0	B	-	The last used folder in the mail/news-browser, is saved on close.  c:\program files\hamster\groups\news.out\
ShowDirectly	1	B	X	Menu-setting: Preview | Preview Activated
State Left Top Width Height		I I I I I	X X X X X	Settings for the browserwindow, are saved on close.
news.ShowHeaders mail.ShowHeaders	** **	S S	- -	;Here you can add headers shown in the preview for mail resp. news Only these headers are shown unless Preview: AllHeader is set to true. ** the default-headers see below.
** default for news.ShowHeaders and mail.ShowHeaders
'Subject, From, To, CC, Newsgroups, Followup-To, Lines, Control, Supersedes, Message-ID, Date'

news.DefColumnSort mail.DefColumnSort	0 0	I I	X X	Column number for news/mail on which the list of messages will be sorted. Set by menu: View | Save as default sorting sequence.
news.DefColumnSortUp mail.DefColumnSortUp	1 1	B B	X X	En-/Disable normal sort-order in list of messages for news/mail. Set by menu: View | Save as default sorting sequence.
ShowFileTypes	0	I	X?	En-/Disable show all files. Set by menu: View | Show all files.
Preview_Wordwrap	0	B	X	En-/Disable preview with wordwrap. Set by menu: Preview | Preview: Wordwrap
Preview_AllHeader	0	B	X	En-/Disable preview with all headers visible. Set by menu: Preview | Preview: All headers
Preview_FixedPitchFont	0	B	X	En-/Disable preview in a fixed pitch font. Set by menu: Preview | Preview: Fixed pitch font This is usefull for viewing ascii-art signatures, source/script-listings, logfiles.
Preview_TextAttr	2	I	-	0 = format and suppress original chars 1 = format, but show original chars too 2 = show as normal text
Preview_MaxLines	300	I	-	How many lines of an article will be shown maximal in the preview
UseSmallIcons	0	B	X	En-/Disable setting for use small icons. Set by menu: View | Use small icons
OwnTaskbarEntry	0	B	X	En-/Disable a separate taskbar-entry for dialog "Open Dir(s) for News/Mail...". Sometimes the own taskbar-entry for this dialog has to be activated, because under special circumstances the main window can loose its taskbar-entry.
UpdateIntervalms	1000	I	-	Interval for refreshing the directory-Browser (Milliseconds)
Mailboxes		S	X	The shown mailboxes and their sorting in the Browser. As default (no entry) all mailboxes will be shown.
ColWidths	**	S	X	The settings for the columnwidths in the browserwindow. ** default: 'Default=80 Newsgroups=140 Subject=180 Date=110 KB=40 Lines=40 To=130 From=130'

Section: [EditScripts]

In this section Hamster stores the settings for the "Manage scripts and modules" menu (menu Scripts)

Item-name	def val	ty pe	me nu	Description
EditDirectly_HSC	0	B	X	En-/Disable editing scripts with the internal editor of Hamster.
EditDirectly_HSM	0	B	X	En-/Disable editing modules with the internal editor of Hamster.
State Left Top Width Height		I I I I I	X X X X X	Settings for the browserwindow, are saved on close.
ActivePage	0	B	X	Last active tab/page on the 'Manage scripts and modules' menu, saved on close.
OwnTaskbarEntry	0	B	X	En-/Disable a separate taskbar-entry for the dialog "Manage scripts and modules". Sometimes the own taskbar-entry for this dialog has to be activated, because under special circumstances the main window can loose its taskbar-entry.

Section: [KillList]

In this section Hamster stores the settings for the "KillList" menu (menu KillList)

Item-name	def val	ty pe	me nu	Description
State Left Top Width Height		I I I I I	X X X X X	Settings for the browserwindow, are saved on close.
ColWidths	**	S	X	The settings for the columnwidths in the killfile-browserwindow.
SortBy	0	I	X	Primary sort on Column-number of the killfile-browserwindow.
SortInverted	0	B	X	En-/Disable inverted sort-order in the killfile-browserwindow.
SortSeq0	?	I	X	Second sorting sequence of the killfile-browserwindow.
SortSeq1	?	I	X	Third sorting sequence of the killfile-browserwindow.

Section: [SelPulls]

In this section Hamster stores the settings for the menu "Select Pulls" and "Select Pulls for server" menu (menu Configuration News)

Item-name	def val	ty pe	me nu	Description
State Left Top Width Height		I I I I I	X X X X X	Settings for the menu "Select Pulls" and "Select Pulls for server", are saved on close.
Split	222	I	X	The height of the "Show group with" upper half window in the menu "Select news-pulls".
DescsWidth0	200	B	X	The columnwidth of the first column in the upper or right half window in "Select news-pulls".
PullsWidth0	200	B	X	The columnwidth of the first column in the lower or left half window in "Select news-pulls".

Section: [DlgGroupSelect]

In this section Hamster stores the settings for the "DlgGroupSelect" menu (menu DlgGroupSelect)

Item-name	def val	ty pe	me nu	Description
SearchType	0	I	X	Selectiontype for selecting groups in range [0..3]
SearchGroup		S	X	String or regexp for selecting groups
NewsserverSearchType	0	I	X	Selectiontype for selecting newsservers in range [0..1]
SearchServer		S	X	Regexp for selecting newsservers (use with previous item).
Server ?	0	I	-	Selected server index.

Section: [ScoreEdit]

In this section Hamster stores the settings for the "Edit ScoreFile" menu (menu ScoreEdit)

Item-name	def val	ty pe	me nu	Description
State Left Top Width Height		I I I I I	X X X X X	Settings for the menu "Edit ScoreFile", are saved on close.

Section: [SSL]

In this section Hamster stores the settings for the "SSL" menu (menu SSL)

Item-name	def val	ty pe	me nu	Description
LowEncryption	0	B	X	En-/Disable low encryption (56 and 64 bit)
MediumEncryption	1	B	X	En-/Disable medium encryption (56 and 64 bit)
HighEncryption	1	B	X	En-/Disable high encryption (56 and 64 bit)
UseRC2	1	B	X?	En-/Disable use encryption algorithm RC2
UseRC4	1	B	X	En-/Disable use encryption algorithm RC4
UseIDEA	0	B	X	En-/Disable use encryption algorithm IDEA
UseDES	1	B	X	En-/Disable use encryption algorithm DES
Use3DES	1	B	X	En-/Disable use encryption algorithm Triple DES
UseAES	1	B	X	En-/Disable use encryption algorithm AES
UseMD5	1	B	X	En-/Disable use encryption algorithm MD5
UseSHA1	1	B	X	En-/Disable use encryption algorithm SHA-1
UseSSLv3	1	B	X	En-/Disable use encryption protocol SSL v3
UseTLSv1	1	B	X	En-/Disable use encryption protocol TLS v1
CaFile		S	X	File with certificates for verification File with local installed certificates
CaPath		S	X	Path with certificates for verification Path to local installed (single-)certificates
RandFile		S	X	External seed file for random PRNG File to init the randomize-generator
PrivateKeyPair		S	X	Certificates: key pair (required for local servers) File with the private SSL-keypair for the local servers
VerifyLevel	0	I	-	Setting for method of verification of SSL certificates by local servers. 0 -> (Default) no check 1 -> check only if it is an existing certificate 2 -> check everytime 3 -> check and find differences in local copy
The settings below are only for compatibility
These are potential insecure! Do only activate if there is no other way!

UseExportAlgorithms	0	B	X	En-/Disable use export encryptions algorithms (40 and 56 bits)
UseADH	0	B	X	En-/Disable use anonymous ciphers (no authentication)
UseServerModeV2	0	B	X	Accept SSLv2 connections on local servers

Section: [SSL] OBSOLETE ITEMS

All items below are obsolete, no longer used.
Advice is to remove these from the ini-file (if present) to avoid confusion with similar new items.
** Obsolete, this item is no longer used and can be removed.

Item-name	def val	ty pe	me nu	Description
SSLKeyFile	stunnel.pem	?	**	Optional file with Certificates for local server
LocalPOP3UseSSL	0	?	**	Using of SSL for local servers 1=SSL; 0=Normal
LocalSMTPUseSSL	0	?	**	Using of SSL for local servers 1=SSL; 0=Normal
LocalNNTPUseSSL	0	?	**	Using of SSL for local servers 1=SSL; 0=Normal
STunnelOption	-D 7	?	**	Optional parameter for global consts of options for stunnelw.exe
SSLLocalStartTimeout	10	?	**	Timeout for starting of stunnel for local servers
SSLStartTimeout	120	?	**	Timeout for starting of stunnel for connections to ISPs
SSLProg	stunnelw.exe	?	**	Optional programname. Warning: The only supported version of stunnel is Martin Germann's changed version "STUNNELW.EXE"
SSLWrapperNotClose	0	?	**	Don't close of stunnel for debugging
Source: C:\AA\Src20020607\EnHlp\html\file41ww.htm - (176)


Data flow

Overview of the data flow of news-articles in Hamster

Translated by Obbe-Jan Bakker

Source: C:\AA\Src20020607\EnHlp\html\hams42y8.htm - (177)


Menus

Menu

Translated by Heiko Studt, corrected by Shehu Dikko

Please note that some settings are only for advanced users, these settings/menu items are only accessible if the menu item “Advanced Configuration“ has been activated. New users are advised to inform themselves of these functions before using these more advanced features.

· Menu: File

· Rebuild global lists

· Purge all groups

· Rebuild history

· Clear counters/log

· Refresh menu items

· Exit

· Menu: Configuration

· General Settings...

· Tab: Visual

· Tab: Logfiles

· Tab: Online-Menu

· Tab: Internal Groups

· Tab: SSL

· Tab: Misc

· Accounts and Passwords...

· Tab: Local Accounts

· Aliases for accounts

· Tab: Passwords

· Local server...

· Tab: General (local domains)

· Edit IP-Access

· Tab: News NNTP

· Tab: Mail POP3

· Tab: Mail IMAP

· Tab: Mail SMTP

· Tab: Remote Control (Telnet)

· Automation...

· Tab: General

· Tab: Actions

· Tab: Load Articles by MID

· News: server, groups, pulls...

· Tab: Settings

· Tab: Newsserver

· Tab: Newsgroups

· Tab: News-Pulls

· Killfile-Log/-settings ...

· Tab: Entries

· Tab: Settings

· Tab: Scorefile

· Menu: File

· Set sort-sequence...

· Save all changes

· Undo all changes

· Exit

· Menu: Entries

· Show Details...

· Select all

· Mark for retrieval

· Delete...

· Retrieve whole thread

· Delete whole thread

· Scorefile-Test

· Mail: settings & server...

· tab: POP3-Settings

· Edit Mail-Score-File (Killfile)

· tab: POP3-Mailserver

· tab: SMTP-Settings

· tab: SMTP-Mailserver

· Disable/Enable Advanced Configuration

· Edit special files

· Edit News-Score-File (Killfile)

· Edit Mail-Score-File (Killfile)

· Edit Hamster.ini...

· Edit Hosts (resolve domains to IPs)...

· Reload configuration

· Menu: On-line

· 1-9:user-defined menu's

· All servers (News+Mail)

· Separate NNTP/SMTP/POP3 -server

· RAS-Dialing

· RAS-Hangup

· Stop all tasks

· Menu: script

· ( Existing scripts with (sub-)folders )

· Demo

· Manage scripts and modules...

· Stop all scripts

· Menu: local servers

· Start/stop Newsserver (NNTP)

· Start/stop Mailserver (POP3)

· Start/stop Mailserver (IMAP)

· Start/stop Mailserver (SMTP)

· Start/stop remote control Telnet-server (RECO)

· Open Dir(s) for News/Mails ...

· Help

· Contents

· FAQ

· System-Information

· History...

· About...

· Main window context menus

· Protocol for Newsjobs queue

· Show single thread

· Copy line to clipboard

· Copy all to clipboard

· Clear log(s)

Source: C:\AA\Src20020607\EnHlp\html\menu2v1s.htm - (178)


Configuration, News (groups) Newsserver

Menu: Configuration / News: server, groups, pulls... / tab: Newsserver: / button News-Pulls

Translated by Obbe-Jan Bakker

On the left side, all now subscribed groups of the current server are presented, to the right the whole grouplist of the server.

With doubleclick or the suitable switches, groups can be subscribed resp. unsubscribed.

The grouplist to the right is thereby filterable with different methods: either with a regular expression or a simple search expression or the beginning of the group name or after the Initials of the requested group.

With OK the changed selection in the hamster is stored.

Source: C:\AA\Src20020607\EnHlp\html\menu8xdc.htm - (179)


Configuration, News, News-Pulls

Menu: Configuration / News: server, groups, pulls... / tab: News-Pulls / button: Add

Translated by Obbe-Jan Bakker

In addition in the upper area of the appropriate dialog, the desired groups are marked and are selected subsequently in the lower part the desired groups/server-combinations refined. With [OK] the groups become then final subscribed for this server.

In order to arrange the upper selection clearer, the groups list (incl. the descriptions) is filterable in different ways:

Either with a regular expression or a simple search expression or the beginning of the groups name or after the initials of the searched group - the last choice is stored automatically. In the lower list can, filtered with a regular expression or over a list, which selection of the desired servers are met.

Source: C:\AA\Src20020607\EnHlp\html\menu90j4.htm - (180)


Remote control: general basics and installation
general basics and installation

Remote control: General basics and installation

Translated by Obbe-Jan Bakker

To the purpose of the Remote Control over TCP/IP networks, the hamster possesses a remote control server. The remote control server is based on the Telnet-protocol and uses the TCP-Port 23. Each Telnet-client can be used to establish the connection by means of Telnet. The Remote Control server of the Hamster does not produce independently an echo, so if the Telnet-client has the option for local echo you should turn this on. For the line-break only CRLF may be used. Those Telnet-clients that exclusively use the CR character for line-break are unsuitable. To be able to use the Remote Control server it must be activated and made accessible for the specific user. There to four things are necessary:

1. Start the Remote Control server in the menu “Local“.

2. Create the binding of the Remote Control server to the desired network interface in menu

“Configuration“ -> “Local Server“ -> “tab: General“ -> “Edit IP Access“.

{If the tabs "General" and "Remote Control" are both missing check the setting "Advanced Settings").

3. Set the desired IP address for the access to the Remote Control server in the menu

“Configuration“ -> “Local Server“ -> tab:“Remote Control“ field “Bind to IP“.

4. The desired user must be given permission to use the Remote Control in menu

“Configuration“ -> “Accounts & passwords...“ -> “tab: Local accounts“

-> “select the specific user“ -> “button: Edit“ -> “tab: Remote Control“.

Please consider that a potential hacker can, in case of a successful break-in into the Remote Control server, get full access to the hamster and depending upon available scripts also on their computer and/or their computer network. Therefore set the access permissions for the Remote Control server as restrictively as possible. Use if possible a secured transmission of the password by means of the SASL - mechanism CRAM-MD5 or CRAM-SHA1. Practise the connections with the Remote Control server over the Internet only with use of a secure SSL-tunnel.

Source: C:\AA\Src20020607\EnHlp\html\reco7euo.htm - (181)


Remote control syntax

Syntax for the Remote Control server

Translated by Obbe-Jan Bakker

AUTH ([-SIMPLE] Username Password) |
     (-SASL Mechanism [InitialParameters])

AUTH [-SIMPLE] Username Password

Simple authentication of the users. The password is sent a clear text over the line. This form of the authentication is suited only in small private networks, because it offers no protection at all of the password against logging of the connection.

AUTH –SASL-Mechanism [InitialParameters]

Improved authentication procedure after RFC 2222

This authentication procedure supports several individual mechanisms. The security of these mechanisms is different. The Following mechanisms are supported:

CRAM-SHA1

RFC 2104, 2195, 2202, 3174

This cryptographic secure mechanism offers the best protection of the password during the transmission from the Clients to the server. It is provable secure against cryptographic attacks. Brute-Force-Attacks lie far outside of the technically feasible.

CRAM-MD5

RFC 1321, 2104 2195, 2202

This mechanism offers a very good protection of the password during the transmission from the Clients to the server. There are indeed theoretical attacks against MD5 well-known, these lie however nevertheless far outside of the practically feasible.

LOGIN

This algorithm masks the password only slightly. The clear text of the password can very quickly be determined on the basis of tables. The password is sent here as base64-coded clear text over the line. This form of the authentication is suited only in small private networks, because it offers no protection at all of the passwords against logging of the connection.

PLAIN

RFC 2487

This algorithm does not code the password, it is exclusively intended for password transmission on a secure channel, for example in a SSL-tunnel without Authentication.

EXTERNAL

RFC 2487

Authentication by external software, e.g. SSL in connection with TLS handshake. At present yet, this is for the ReCo-server not supported.

HELP [command]

List of the general command syntax or for a special command.

LOG (LIST [-S Size] [-P Pattern]) | ROTATE

LOG LIST [-S Size] [-P Pattern]

Lists the log file of hamster. With the option –S the size of the file can be limited to a certain number of KiloBytes. The default value is 16. The option –P limits the lines to be logged to those corresponding to the given regular expression Pattern.

LOG ROTATE

Closes the current logfile and opens a new log file. The file name of the log-file rotates according to the settings in menu "Configuration | General Settings | tab:LogFiles".

NEWS (ADD|DEL GROUP Groupname) |
     (ADD|DEL PULL Groupname Servername ) |
     (LIST GROUP|PULL [-P Pattern])

NEWS ADD|DEL GROUP Groupname

ADD adds a newsgroup and DEL removes a newsgroup.

NEWS ADD|DEL PULL Groupname Servername

ADD adds a newsgroup to the list of pulls for a newsserver and DEL removes a newsgroup from the list of pulls for a newsserver.

NEWS LIST GROUP|PULL [-P Pattern]

List all newsgroups or all Newspull-entries. The listing can be limited by the regular expression Pattern .

QUIT

Ends the connection with the remote control server.

SCRIPT (LIST [-P Pattern]) |
       (START [-W] Scriptname [Scriptparameter]) |
       STOP

SCRIPT LIST [-P Pattern]

Lists all scripts available at the Remote Control server. The folder from which these scripts are read, can be adjusted in the file Hamster.ini in the section [DIRECTORIES] with the variable ScriptsRC.

SCRIPT START [-W] Scriptname [Scriptparameter])

Starts a script with optional use of parameters. The optional parameter –W establishes whether the Remote Control server should wait until the script is finished before it continues its command processing.

SCRIPT STOP

Stops all Scripts.

SERVER (STATUS|START|STOP|RESTART) (RECO|SMTP|POP3|NNTP)

SERVER (STATUS|START|STOP|RESTART) (RECO|SMTP|POP3|NNTP)

Starts or stops a local server or returns the current status of the server.

TASK [-P Pattern]
     STOP ThreadID

TASK [-P Pattern]

Returns a list of the active Tasks. This list can be limited by the regular expression Pattern.

TASK STOP ThreadID

Stops a single thread, the thread with the identifier ThreadID.

Source: C:\AA\Src20020607\EnHlp\html\reco7hrk.htm - (182)


Module (Scripts)

Hamsterscripts: Module

Translated by Obbe-Jan Bakker

Adapted from original German explanation by Lars P. Wolschner

Just like a procedure or function provides a serie of statements with a name, so combines a Module a collection of variables, procedures and functions together within a single name. The functionality of these can be used by multiple scripts and/or other modules without having to re-declare the respective variables and procedure/function-definitions in every single script and/or module. Scripts and modules only have to load a module to gain full access to every variable and/or modular implemented procedure, function defined within the module.

Therefore modules are also the best choice for shared development of a script-project, because this allows other developers to create ready-to-use functionality.

Definition of modules

Modules are plain textfiles just like scripts and can be created and edited in for example Windows Notepad. In a single file only one module can be defined. The filename must have the extension hsm. Module-files are to be stored in the module-folder of Hamster. If there is no separate folder set for modules, the default folder for modules will be the Hamster main folder. The separate folders for scripts and modules can be set from the menu "Scripts | Manage scripts and modules... | tab:General".

The syntax-language of Hamsterscript is also applicable to modules.

Different than a script a module can be initialized by the preprocessort-command #!initialize. This initialization part contains statements which will be executed after the first load of the module and must be ended with a return()-statement. In the braces an expression can be defined whose value represents the result of the initialization. Every value different from zero indicates failure and will result in aborting the script using the module. The initialization statements can use all available global variables, procedures and functions.

A module always has the following structure:

#!hs2

#!initialize
<declaration of global variables>
<initializing statements>
return( <initResult> )

<procedure- and function-definitions>

It is advisable to make all identifiers defined in a module start with the name of the module. This garanties uniqueness and avoids name-conflicts with the identifiers of other developers. If modules are made public available it is advised to use a name-prefix for the scripts and module-names. This also makes name-duplicates (name-conflicts) for scripts/modules less likely.

Use of modules

The variables, procedures and functions of a module are all global accessible if loaded with the preprocessor-statement #!load. Modules do not have a separate scope (context).

Modules can be used by scripts and/or other modules. If used in a script the #!load-statements must be placed before the first 'normal' -statement (that is a non-preprocessor-statement). In a module additional #!load-statements can also occur in the initialization-part. Every #!load-statement garantees that module will be loaded. The modulename must be given without path, but with extension:

#!load MyModule.hsm

The file MyModule.hsm will be searched for in the modulefolder of Hamster.

The initializationparts of modules are executed in reverse-order of loading. The last loaded module will be initialized first. Because modules don't have a separate scope themselves the Variabled, procedures and functions in a module are all shared by the global scope of the script with all modules loaded by the script or a module loaded by the script.

A script is only executed after all loaded modules have finished their initialization. In the initialization part of a module it is indeed possible to access the identifiers of another module before the initialization of that other module.

To avoid this, interdependent modules must in principal be loaded with the #!load-statement for every needed module. The script interpreter will always load a module just once, also when there are multiple #!load-statements for the same module.

Hereby used modules mudy always be loaded after the using modules. This way these are initialized in such an order that used modules will be initialized before being accessed (used) by other modules. If for example a module MyHighLib uses identifiers of a module MyLib and MyLib uses identifiers of module MyBaseLib the following loading-order is recommended for use in scripts or other modules:

#!load MyHighLib.hsm
#!load MyLib.hsm
#!load MyBaseLib.hsm

If a script or module uses only identifiers of MyHighLib and MyBaseLib than the load-command for MyLib is not needed and can indeed be removed.

Source: C:\AA\Src20020607\EnHlp\html\hscr06g4.htm - (183)


Expressions and operators

Hamsterscripts: Expressions and operators

Translated by Paul Batchie

Adapted from original German explanations by Lars P. Wolschner

Expressions

The interpreter for Hamster scripts permits the calculation of arithmetic and boolean expressions. An expression supplies a value, after its calculation, which can be assigned to, used in a procedure or function, for transfer as an Argument or reuse in other expressions. Expressions consist of operators and operands, which are linked to yield one total result. As operand any value, also any other expression can be used.

Operators

Binary operators are operators with two operands. The interpreter implements the usual syntax for arithmetic expressions, in which both operands can be placed before and after the operator. (Infix-Notation). The command

$Sum = $Operand1 + $Operand2

adds the values of the variables $operand1 and $operand2 and assigns the result to variable $sum. If one or both of the operands are Strings or can not be converted to numeric, (that is : is nonnumerical), a string addition process takes place. That is string $operand1 and $operand2 will be concatenated and the resulting string will be assigned to $sum (Concatenation, ”String-Addition”).

Unary operators consist of one operand (Prefix-Notation). The command

$Neg = - $Operand

for example assigns the negated value of variable $Operand to the variable $Neg.

The operators iif() and icase() process at least three operands, and are treated in the section on Conditionals, Branches.

The command interpreter understands the following operators:

Operators       Nr of Operands   Description
()                  1            grouping
!                   1            logical negation
~                   1            binary bitwise negation (complement)
+                   1            (unary) positive sign
-                   1            (unary) negative sign
*                   2            multiplication
/                   2            division
%                   2            modulus (rest of division)
+                   2            addition, string-concatenation
-                   2            subtraction
<<                  2            binary bitwise shift left
>>                  2            binary bitwise shift right
<                   2            smaller than
>                   2            greater than
<=                  2            smaller or equal
>=                  2            greater or equal
== or =             2            equal
!= or <>            2            not equal
&                   2            binary AND
^                   2            binary XOR
|                   2            binary OR
&&                  2            logical AND
||                  2            logical OR

Priorities and association:

The operator's attributes priority and associativity determine the order of the calculation if she is not overridden by use of given by parentheses, the round braces ( ). In the expression

$Sum = func1 + $Operand2 * func3

first the product from the value of $Operand2 and the result of the function func3 is calculated and than the result of the Function func1 will be added to this result; so func3 will be executed before func1. The operator of multiplication has a higher priority (Rank) than the addition, the interpreter can in arithmetic expressions follow the normal mathematical rules: ”multiplication and division are calculated before addition and subtraction”. In the expression

$Sum = func1 + $Operand2 + func3

at first the sum from the result of the function func1 and $Operand2 is calculated and after that the result of the function func3 is added to this result; so func1 is called/executed before func3. The operand $Operand2, which stands between the two additions-operators wanders hereby first to the left, the additions-operator is left-associative. In case of a right-associative operator the $Operand2 would be calculated with the operator to the right.

The interpreter of Hamster uses the following priorities and associations. Operators with equal priority are on the same line. The priority can be overruled by use of parentheses, the round braces ( ).

Operators       Precedence/Priority     Associativity      Allowed datatypes of the operands
()                     (highest)          <-- left              int, str
!  ~  +  -             (unary)            --> right(prefix)     int
*  /  %                .                  <-- left              int, str
+  -                   .                  <-- left              int, str (only with +)
<<  >>                 .                  <-- left              int
<  >  <=  >=           .                  <-- left              int, str
==  =  !=  <>          .                  <-- left              int, str
                       .                  <-- left              int
^                      .                  <-- left              int
|                      .                  <-- left              int
                       .                  <-- left              int
||                     (lowest)           <-- left              int

The order of priority for calculating can be overruled by use of parentheses, the round braces ( ). In processing the calculation of

$Sum = func1 * ( $Operand2 + func3 )

the function func3 will be calculated before the function funct1.

Source: C:\AA\Src20020607\EnHlp\html\hscr0ctv.htm - (184)


Jumps

Hamsterscripts: Jumps

Translated by Paul Batchie

From the original German explanation by Lars P. Wolschner

Jumps allow with the processing of commands out of the order in which the statements are listed in the source text. A jump is initiated by the command goto(), in whose parentheses a label is indicated as target: The target is marked by a label which is to be inserted just before the first statement to be executed after the jump, the label()-statement is inserted as jumptarget:

Print( "here is the Last statement before the jump" )
Goto( target ) # jump begins
print( "This command is jumped over." )
label( target ) # jump lands here
print( "the First command after the jump")

The first line of this example prints the text ”here is the Last statement before the jump”, then performs the goto( target )-statement and proceeds with the first statement following the label( target )-statement. Note, that the target can be an identifier, but not a Stringliteral.

The combination of jumps and branches makes loops possible. A loop allows the repeated execution of commands.

The example

  # commands before the loop

label( loopstart )

  # loop body, with commands
  if( <boolean expression> ) # Conditional
  goto( loopsend )
  else
    goto( loopsstart )
  endif

label( loopsend )

  # commands after the loop

repeats all commands between the loop's start and the loop's end, until the Conditional <boolean expression> proves true, whereupon the program flow is directed to the loop's end, where the loop is terminated. The Conditional is re-tested on every cycle.

However, such constructions are obsolete. More orderly working models are available for this purpose. The example above can be better formulated by the control structure of a postconditional loop.

The example

# commands before the loop

Repeat
  # loops body, with commands
until( <boolean expression> )

# commands after the loop

behaves just as the first example, and is shorter and clearer. It shows the repeating character much better and expresses clearly that the condition is tested after each cycle. In general there is no reason to use jumps or to recommend use of these constructs. A script without jumps is in general more structured.

Source: C:\AA\Src20020607\EnHlp\html\hscr55bk.htm - (185)


Conditionals

Hamsterscripts: Conditionals, branches

Translated by Paul Batchie

Adapted from original German explanations by Lars P. Wolschner

Conditionals in command sequences

A Conditional statement makes possible the alternative execution of one or more commands. The conditional is given as a boolean epression and determines which alternative commands will be executed.

The conditional begins with the keyword if and is followed by the condition (boolean expression) to be checked in round parentheses. Commands follow on succeeding lines, and the conditional is closed with the keyword endif:

if( $a < $b )
  print( "Condition fulfilled." )
endif

In this example the print()-statement is executed only if the value of the boolean expression $a < $b equals 1 (condition fulfilled), which occurs when $a is less than $b. All commands following the endif will be executed unconditionally.

The keyword Else begins a set of commands to be implemented in the case of non-fulfillment of the boolean condition:

if( $a < $b )
  print( "Condition fulfilled." )
else
  print( "Condition, unfortunately, does not fulfill!" )
endif

This example is similar to the previous example; as long as the variable $a has no lower value than the variable $b (that is $a > $b or $a = $b is valid) the text ”Condition, unfortunately, does not fulfill!” will be reported.

Conditionals within expressions

Testing for conditions can occur within an Ausdrucks itself by means of the iif() operator. The conditional

if( $a < $b )
  $x = $b - $a
else
  $x = $a - $b
endif

can also be expressed by the command

$x = iif( $a < $b, $b - $a, $a - $b )

If the condition $a < $b is fulfilled, then $x gets the value of the expression $b - $a, otherwise the value of the last expression $a - $b. Only the expression which value will be returned by the iif()-Operator will be calculated. In the line

$x = iif( $a < $b, $b - $a, calc( $c ) )

the calc( $c ) will not be executed if the condition $a < $b is fulfilled and the value of $b - $a is computed and returned.

The icase() operator also can be applied within an expression. As selection mechanism serves an expression, which result value can can have more than just two alternatives. The alternatives in the next example are for reasons of readability divided into multiple lines, connected by the concatenation character underscore _. It is recommended to use this method in your own scripts.

$x = icase( $a + $b, 1, " the First expression ", _
                   2, " the Second expression ", _
                   3, " Third expression ", _
                   else, " Unknown value! " )

This example assigns to $x the Literal ” the First expression ” if the expression $a + $b has the value 1, the Literal ” the Second expression ” if the value 2, etc. The keyword Else covers all other values; if the expression $a + $b has a value other than 1, 2 or 3, $x is assigned the Literal ”Unknown value!”. The Else switch is optional. Also, the icase() operator calculates only the expression whose value is returned.

The icase() operator generally has the following syntax:

icase( <exp_selector>, <exp_alt_1>, <exp_result_1>, _
                       <exp_alt_2>, <exp_result_2>, _
                       ...
                       <exp_alt_n>, <exp_result_n>[, _
                       else, <exp_result_else>] )

At every place not only values and variables, but expressions also can be used. It is not required to split the conditions to separate lines. This is done here to increase the readability.

Source: C:\AA\Src20020607\EnHlp\html\hscr5ahw.htm - (186)


Instructions and comments

Hamster-Scripts: Statements and comments

Translated by Paul Batchie

Adapted from original German explanations by Lars P. Wolschner

Statements

A script for the Hamster interpreter consists of a sequence of statements. If control structures such as jumps, bypasses or loops do not dictate differently, statements are executed in the order of their occurrence in the source text. The source texts are to be stored as text files which can be produced by, for example, the Windows-editor Notepad and similar. The file name is for hamster scripts with the Extension hsc and for modules with the Extension hsm.

The language described here is understood by Hamster only since version 1.3.17.0. Therefore each file must be initiated with the pre-processor statement #!hs2 on a separate, first line, otherwise only the less-powerful forerunner script language will be used.

Each statement occupies its own line, and therefore needs no closing character. A statement line can be arbitrarily long. Example:

 print(uppercase(" this is an individual line "))

A statement also can extend over several text lines, by appending the connecting underline character, "_" to all its truncated lines. The underline must be separate from the preceding characters by a space:

 print( _
   uppercase(" this is an individual line ") _
   )

Within a Literals (in the example: " This is a separate line "), however, an instruction line can not be made up.

Script statements are executed until the interpreter encounters a Quit statement. The Quit() statement can return the value of the number included in optional parentheses: quit().

Comments

Comments serve only the understanding of the developer or other human readers of the source text and are ignored by the command interpreter.

A comment begins with the # character. All text that follows will be ignored by the interpreter:

 print("Get rich quick does not work" ) # # you need a shift key!

Only the print () statement is executed; the comment following # has no influence. A comment also can be located alone on a line.

The pre-processor statements, which are initiated by a pound sign, #, that is directly followed by the exclamation sign call character, #! are not comments. In order to avoid overlaps with already implemented or future pre-processor commands, a comment may not begin with an exclamation sign after the pound sign-call character #.

Comments in curved parentheses { } can also be placed within a statement, as here in a statement going over several text lines:

 Print (_ {comment in an continuous statement line}
         uppercase (" This is an individual line ") _
)

Literals (in the example: This is an individual line.) cannot be commented basically, all characters of the comment including the brackets or the pound sign are included in the literal.

Source: C:\AA\Src20020607\EnHlp\html\hscr5bz9.htm - (187)


Syntax-overview (scripts)

Hamsterscripts: Call by Action

Translated by Heiko Studt and Obbe-Jan Bakker

Actions in Hamster make it possible to intervene at specific points in the program-flow of Hamster. At these points an external program and/or hamsterscript can be run automatically. The configuration of these actions can be done directly into the hamster.ini. Advice is however to use the appropriate menu in "Configuration | Automation | tab: Actions".

Now first a practical example:

[Actions]
news.out.exec=Korrnews.exe
news.out.pars=Type:news Filename:"%1"

These entries (and some others) are automatically created (if absent) by Korrnews and have the following task: If you post a new article to Hamster from within your newsreader program, this article gets saved as separate file in the hamsters "news.out"-folder. The action in this example ensures that immediately following the program "Korrnews.exe" will be called with as parameters among other things also the name of the file with the posting (incl. full filename). This allows Korrnews to modify/correct the article before it is posted to the appropriate newsgroup(s).

The following base-types of actions are available:

Mail:

mail.in.* for incoming mail,

mail.out.* for outgoing mail,

mail.internal.* for mail generated by Hamster itself and

mail.local.* for mail to other local users.

With mail.* a general action can be defined for all mail-types together.

A specific action has always priority above the general type. Specific for incoming mail there are a few account-specific action-variants. These will be explained below.

The action mail.getheader.* is executed before the Mailfilter is checked and can be used for more intelligent filtering of mail.

News:

news.out.* for outgoing postings and

news.local.* for postings to local newsgroups, also these from the Mail to News Gateway.

In case of a crossposting to both a local group and an external group the local variant will be handled by the news.local.*-action and the variant for the news.out-folder by the news.out.*-action.

With news.* a general action can be defined for all news-types together.

This is similar to the actions for mail.

A specific action has always priority above the general type.

The action news.preprocess.* is called before the actual processing in Hamster for all local and outgoing postings, including the Mail-to-News- and the News-to-Mail-Gateway. The action news.gateway.* makes a targeted handling possible for mail to be posted through the Gateway to newsgroups.

Other:

The action group.doubleclick.* allows to start a specific program/script, on doubleclick on a newsgroup in the News-Configuration-dialog. The groupname of the selected group is used as parameter for the called program/script.

The action trayicon.doubleclick.* allows a individual reaction to a doubleclick on the Hamstericon.

The action startup.* allows to call a script directly after the initialization (and if necessary purging of the database).

The action shutdown.* is called just before the Hamster is closed.

The action Status.click.* allows a reaction to a single-click on the statusline.

The action Status.doubleclick.* allows an individual reaction to a doubleclick on the statutline.

Structure of an action:

- *.exec: file name (if necessary incl. Path) of the program to be called

- *.pars: Parameters for the program to be called, %1 is placeholder for the file name (and/or group name) and %0 to report the type of action.

- *.script: Call of a hs2-Script. If program and script are both specified, both will be run - the program will be started first. A called Script gets automatically two parameters: ParamStr(1) contains the type of action as a String and ParamStr(2) the file name and/or group name (corresponds to %1 in * pars).

- *.wait: Waiting behavior. There are four variants: 0 (default) does not wait at all, 1 waits only for the call of the program (if a program is specified), then for the script to end (if a script is specified) and continues only then with the further internal execution in the hamster, 2 waits only for the program and 3 waits only for the script to end. In the case of news.local.* wait is set automatically to 1.

- *.ExeStartType: Visible behavior. When calling an external program this program can be run hidden in the background. There are two values possible: 0=normal, 1=hidden, Default 0.

Account-specific actions:

In order to create more flexibility, especially with incoming mail there are Account-specific mail-actions possible.

The structure is thereby type.accountname.* i.e. instead of mail.in.exec and mail.in.pars for the handling of the account "test" mail.in.test.exec and mail.in.test.pars will be used. Also on account level a general Mail handling is possible: mail.test.* handles where appropriate mail.in.test.*, mail.local.test.* and mail.internal.test.*. If neither an Account-specific special mail entry nor another general Account-specific mail entry exists, Hamster processing will fall back to the normal mail entries.

It is also possible to set an account-specific general mail handling: mail.test.* handles if necessary mail.in.test.*, mail.local.test.* and mail.internal.test.*. If neither an account-specific special mail-entry nor an account-specific general mail-entry exist, the fall back will be the normal actions, that is the handling for all accounts.

Attention: Be careful when using some hs2-commands in scripts started by action, especially actions for mail- or news- transport. Commands for news- or mail-transport might cause deadlocks because these commands themselves might trigger the same action.

Source: C:\AA\Src20020607\EnHlp\html\hscr5gry.htm - (188)


Hamster-Scripts: Statements
Statements

Hamster-Scripts: built-in Statements

Translated by Paul Batchie

Statements are functions without return value, and therefore cannot be used within expressions as arguments or parameters. Most of them control the flow of the script.

quit( <exitcode> )

quit

Terminates a running script. The optional parameter sets the exit-code (default: 0), which has no special meaning yet when used in Hamster.

quit

beep( <code> )

beep

Sends system sounds. Meaningful values of the parameter <code> are in the module hamster.hsm with $SIGNAL_STOP, $SIGNAL_QUESTION, $SIGNAL_EXCLAMATION and $SIGNAL_ASTERISK predefined.

$SIGNAL_STOP        = $00000010;
$SIGNAL_QUESTION    = $00000020;
$SIGNAL_EXCLAMATION = $00000030;
$SIGNAL_ASTERISK    = $00000040;

Beep

error( <errmsg> )

error

Terminates a running script with the given (red) error message in the logfile (default: "User defined error!").

Error ("File", $Filename, " not found!")

assert( <assertion>, <errmsg> )

assert( <assertion> )

Terminates a running script with the given error-message (default: "Assertion failed!"), if <assertion> returns a value of 0 (FALSE).

assert( FileExists($Filename), "File ", $Filename, " not found!" )

return( <retval> ) return

Leaves a Subroutine ("sub") and sets its return-value (default: 0). If used outside of a "sub", the script is terminated (similar to function Quit).

return( 42 )
return( uppercase("fortytwo") )

endsub

This marks the end of a subroutine.

It is similar to function "return", but without parameter, i.e. it leaves a "sub" with a return-value of 0.

If a subroutine is executed without encountering a "return" command, the "endsub" functions as an implicit "return(0)" command.

endsub

entercontext( <identifier> )

leavecontext

A "context" defines the scope for which variables are valid. If a new context is created (entercontext), all variables created in this context are local to it, and if the context is left (leavecontext), they will be deleted. You never should need these statements, as they are automatically invoked while a "sub" is executed (i.e. each sub has its own, local variables).

var( $a )
$a = 42
entercontext( "test" )
var( $a )
$a = 999
leavecontext
print( $a ) # its value is still 42

label( <identifier> )

Marks a position in the script with the given identifier. It is used as the target for "goto" and "gosub".

label( never_call_me_with_a_goto_please )

goto( <identifier> )

Looks for a "label" with the given identifier and continues execution right after it.

goto( GOTOs_are_REALLY_ugly )

break( <condition> )

break

Exits a loop. If a <condition> is given, the loop is only exited if the <condition> returns a value other than zero (read as: "break if condition is true").

do
   break( RasIsConnected )
   # do other things
loop

continue( <condition> )

continue

Continues with next loop-run. If a <condition> is given, the loop is only continued if the <condition> returns a value other than zero (read as: "continue if condition is true").

$i = 0
repeat
   continue( $i = 42 )
   inc( $i )
until( $i > 100 )

sleep( <millisecs> )

Waits the given amount of milliseconds (1/1000 seconds).

sleep( 60000 ) # 1 minute

trace( <onoff> )

If tracing is turned on, all script-lines are displayed while they are executed.

If <onoff> = 0 (false), tracing is turned off, otherwise it is turned on.

trace( 1 )
# ...
trace( 0 )

dump

Display all variables with their values for testing-purposes.

dump

debug( <level>, <text> [ , <text> ...] )

debug( <level> )

If only a <level> is given, the current debug-level is set to the given value (a value of 0 turns off displaying debug-messages). If additional <text> is given, this <text> is only displayed if the current debug-level is greater or equal to the given <level>.

debug (255)
debug( 1, "Counter: ", $Counter )
debug (10, " Now one sees it! ")
debug (5)
debug (10, " Now no more! ")

runscript( <Scriptname> [ , <Parameter> [ , <wait> ] ] )

runscript( <Scriptname> [ , <Parameter> ] )

runscript( <Scriptname> )

Starts the script <Scriptname> with the parameter <parameter>. If the parameter <wait> is set to TRUE, the calling script waits for the end of the called script, otherwise the execution of the calling script continues without interruption immediately with the next scriptline. Standard is FALSE (Multitasking). The called script can evaluate the handed over parameters with the functions paramstr and paramcount. Parameters can also contain quotation marks, by doubling the quotes: e.g. "hello ""Pauly" "!" becomes 'hello "Pauly"! '.

Example:

Runscript("All.hsc",true)

Example:

Params.hsc

#!hs2
trace(0)
var ($i1)
print ("Params0-0:  Start")

print ("Params0-0:  Start params2.hsc/1")
RunScript ("params2.hsc", "A" + chr(13) + "5000" + chr(13) + "15000", true)
print ("Params0-0:  Ends  params2.hsc/1")
sleep (2000)
print ("Params0-0:  Start params2.hsc/2")
RunScript ("params2.hsc", "B" + chr(13) + "8000" + chr(13) + "5000", true)
print ("Params0-0:  Ends  params2.hsc/2")
sleep (6000)
print ("Params0-0:  Done.")
quit

Params2.hsc

#!hs2
# This script expects 3 parameters:
#    1) an ID (letter o.a.)
#    2) duration in Milliseconds for the 1st pause
#    3) duration in Milliseconds for the 2nd pause
var ($i1)
print ("params2-" + ParamStr (1) + " : Start ...")
print ("params2-" + ParamStr (1) + " : sleep (" + ParamStr (2) + ")")
sleep (ParamStr (2))
print ("params2-" + ParamStr (1) + " : ParamCount = " + ParamCount)
for ($i1, 1, ParamCount+2)
   print ("params2-" + ParamStr (1) + " : " + $i1 + " : >" + ParamStr ($i1) + "<")
endfor
print ("params2-" + ParamStr (1) + " : sleep (" + ParamStr (3) + ")")
sleep (ParamStr (3))
print ("params2-" + ParamStr (1) + " : Done. ")
quit (37)

Source: C:\AA\Src20020607\EnHlp\html\hscr5kj2.htm - (189)


Loops

Hamster-Scripts: Loops

Translated by Obbe-Jan Bakker

Adapted from original German explanation by Lars P. Wolschner

A Loop allows the repeated execution of one or more Statements. The repeat or the end of the loop can set by a condition. This condition can almost always be presented as a Boolean expression

Every loop start with the Loop-header, then the loop-body with the statements to be repeated (iterated) and ends with the Loop-footer:

do # Loop-header
  # Loop-body with statements
loop # Loop-footer

In this form the loop will repeat executing all statements in the body endlessly. Loops can be interrupted conditionally or unconditionally with the break()-statement. In the braces a boolean expression can be entered as interrupt-condition. The loop will be interrupted when if the break()-statement is reached, the condition inside the braces evaluates to true. break without condition results in an unconditional interruption of the loop. If a loop is interrupted, processing will continue with the first statement following the Loop-footer. The statements in the loop-body following the break()-statement will not be executed but are all skipped in the repeat-cycle in which the break()-condition became true.

The continue()-statement prevents execution of the statements in the loop-body after this statement in a similar way, but does not exit the loop but follows with the next repeat-cycle by proceeding again to the first statement of the loop-body. In the braces a boolean expression can be entered (condition). continue without condition always starts a new iteration (repeat-cycle).

Conditional and unconditional break()- and continue()-statements can be used unlimited in the loop-body of a hamsterscript. Loops can be nested but a break()-statement will only exit the loop in which loop-body the statement is executed.

Pre-conditional loop

If the loop-header is immediately followed by a break()-statement this is a so-called pre-conditional loop. This frequently used special case can be written in a more convenient way, in which the condition for executing the statements in the loop-body is contained in the loop-header itself:

while( <boolean expression> )
  # Loop-body with statements
endwhile

The statements in the body are executed as long as the condition presented by the Boolean expression is fulfilled (evaluates to true). The condition is tested before every repeat-cycle is started. If the loop is interrupted processing proceeds with the statement following the endwhile If the condition is already not fulfilled (false) before the first cycle starts this means that the statements in the loop-body will not be executed at all.

Post-conditional loop

If the break()-statement immediately precedes the loop-footer vorangeht, this is called a post-conditional loop. Also this frequently used special case can be written in a more convenient way, in which the condition is contained in the loop-footer:

repeat
  # Loop-body with statements
until( <boolean expression> )

The statements in the loop-body are executed, until the by the boolean expression presented condition is fulfilled. The condition is tested after every repeat-cycle. If the loop is interrupted processing proceeds with the statement following the until. The statements in the loop-body are always executed at least once.

It is possible, but for reasons of readability and efficiency not advised, to combine both the while()-header and the until()-footer in the same loop.

Count-loop

The Count-loop serves for the frequently occurring special case in which the number of iterations can be defined with expressions. The For-loop

for( <loopvar>, <exp_start>, <exp_end>, <exp_step> )
  # Loop-body with statements
endfor

repeats the statements in the loop-body as long as, until the in the loop-variable <loopvar> stored value is equal to or exceeds the value of the expression <exp_end>. Before the first cycle starts the value of the loop-variable is set to the value of the expression <exp_start> (Startvalue). After every iteration (cycle) the loop-variable will be increased with the value of the expression <exp_step> (step-value). If the step-value is omitted the default value of 1 will be used.

Such a for-loop can also be constructed with use of the other loop-variants. However the for-loop is in the execution more efficient, because the loop-header calculates the count-variable and this allows the interpreter faster access during the iteration of the loop. The expressions in the loop-header are only calculated before the first repeat-cycle starts.

Source: C:\AA\Src20020607\EnHlp\html\hscr5v00.htm - (190)


Concurrent Scripts

Hamsterscripts: Concurrent Scripts

Translated by ??? YOU ???

Explanations from: Lars P. Wolschner

Nebenläufigkeit

Der Hamster kann mehrere Skripte nebeneinander ausführen. Jedes Skript läuft dabei völlig unabhängig von allen anderen, unabhängig auch von den übrigen Vorgängen im Hamster. Der Hamster sorgt mit Hilfe des Betriebssystems dafür, daß es beim Zugriff auf Netzwerkverbindungen, Dateien und anderen kontingentierten Ressourcen nicht zu Kollisionen kommt. Einen solcher Ablauf ist ein Prozeß, jedes laufende Skript bildet zusammen mit seinen globalen Variablen einen Hamsterprozeß. Selbst wenn zweimal das gleiche Skript gestartet wird, beginnen zwei verschiedene Hamsterprozesse mit eigenen Daten in voneinander unabhängig gespeicherten globalen Variablen.

Auf einem Rechner mit einem Prozessor oder unter Windows 9x und Windows ME würde jedes Skript für kurze Zeit fortgesetzt, um dann zugunsten eines anderen auszusetzen; so daß der Prozessor jedes Skript und die übrigen Vorgänge im Hamster immer nur für kurze Zeit vorantreibt. Dieser Wechsel wird jedoch schnell genug vollzogen, so daß es für den menschlichen Nutzer wie ein gleichzeitiger Ablauf aussieht.

Nur auf einem Rechner mit mehreren Prozessoren und unter Windows NT oder Windows 2000 können Prozesse auch real gleichzeitig ablaufen. In der Regel startet allerdings auch das Betriebssystem eine Anzahl von Prozessen, so daß die Rechenzeit auch in einem Mehrprozessorsystem nur alternierend zugeteilt wird.

Die Hamsterprozesse laufen letztlich als Windows-Threads, die zum Windows-Prozeß des Hamsters gehören. Wenn der Hamster – genauer: sein Windows-Prozeß – beendet wird (gleich aus welchem Grund), enden alle seine Threads und damit auch alle Hamsterprozesse. Im Folgenden bezeichnet der Begriff des Prozesses immer einen Hamsterprozeß, also die Ausführung eines Skriptes oder eines anderen Vorganges im Hamster.

Synchronisation

Vor der Synchronisation steht oft der skriptgesteuerte Start anderer Skripte. Es macht beim Hamster allerdings keinen Unterschied, ob ein Skript durch Kommandozeilenoption, das Skriptmenü oder skriptgesteuert gestartet wird. Die Prozedur

runscript( <scriptname>.hsc, <strParameter>, <boolWait> )

startet das Skript, dessen Namen im ersten Parameter ohne Pfad, aber mit Extension anzugeben ist; es wird im Skripteverzeichnis des Hamsters gesucht. Diesem Skript wird im zweiten Parameter ein String übergeben, der die Kommandozeilenparameter für dieses Skript enthält.

Der Boolesche Parameter <boolWait> steuert die Nebenläufigkeit: Wird darin 0 übergeben, kehrt die Prozedur sofort nach dem Start des aufgerufenen Skriptes zurück, so daß aufgerufenes und aufrufendes Skript nun nebeneinander ausgeführt werden. Bei jedem anderen Wert kehrt die Prozedur erst zurück, wenn das aufgerufene Skript beendet wurde; das aufrufende Skript wird erst nach Beendigung des aufgerufenen Skriptes fortgesetzt.

Abgesehen von einer gewissen Zeitersparnis wäre die Möglichkeit der Nebenläufigkeit ohne Synchronisation kaum interessant: Man könnte nur solche Skripte nebenläufig ausführen lassen, deren Tätigkeit in keinerlei Beziehung zueinander steht. Die folgende Prozedur bzw. Funktion ermöglichen in häufig anzutreffenden Spezialfällen eine recht einfache Synchronisation:

HamWaitIdle( <intTimeout> )

HamWaitIdle

kehrt erst zurück, wenn der Hamster keine Jobs mehr ausführt oder <intTimeout> msec (1/1000 sec) vergangen sind. Ohne diesen Parameter oder mit dem Wert –1 wird unbegrenzt auf die Abarbeitung aller laufenden Jobs gewartet.

Die Funktion gibt den Wert 0 zurück, wenn keine Jobs mehr laufen; den Wert 1, falls die Timeout-Zeit abgelaufen ist und den Wert 2, falls die laufenden Jobs abgebrochen wurden.

sleep( <intTime> )

kehrt zurück, wenn <intTime> msec (1/1000 sec) vergangen sind.

Synchronisation durch Events

Die vorstehend erläuterten Aufrufe halten das aufrufende Skript an, bis der Hamster einen bestimmten Zustand einnimmt (HamWaitIdle(): Hamster führt keine Jobs aus) oder ein Ereignis eintritt (sleep(): Ablauf einer Zeitspanne). Generell bedeutet Synchronisation, den Ablauf von Prozessen zum Zwecke der Koordination vom Verhalten anderer Prozesse abhängig zu machen. Sie ist immer dann erforderlich, wenn Kollisionsfreiheit allein nicht ausreicht.

Windows und der Hamster garantieren beispielsweise, daß eine Datei zu jedem Zeitpunkt nur durch einen einzigen Prozeß bearbeitet wird. Damit ist aber noch nicht sichergestellt, daß ein schreibender Prozeß grundsätzlich vor einem lesenden Prozeß zugreift, damit letzterer überhaupt Daten zur Verarbeitung vorfindet. Dazu müßten Windows und der Hamster die Skripte lesen und verstehen, die diese Prozesse beschreiben. Weil das nicht möglich ist, fügt man in die Skripte Anweisungen ein, die es bis zum Eintritt eines Ereignisses anhalten (warten lassen) oder seine Fortsetzung von einem Zustand abhängig machen.

Seit der Version Hamster Classic 1.3.22.100 beta können Skripte auf beliebige Ereignisse (Events) warten, die von nebenläufigen Skripten oder bestimmten Vorgängen im Hamster ausgelöst bzw. als Zustand gesetzt werden. Sie werden zur Unterscheidung mit Namen versehen.

Weil auf einem Rechner mehrere Hamster arbeiten können und Ereignisnamen systemweit eindeutig sein müssen, ist dem Namen im Wege der Stringconkatenation eine Prozeßidentifikation (”Mutex-String”) voranzustellen, die mit der eingebauten Funktion GetProcessIdentifier abgefragt werden kann. Die Funktion

EventWait( <strEventname>, <intTimeout> )

kehrt zurück, wenn das Ereignis mit dem Namen <strEventname> eingetreten (gesetzt) ist oder die Zeit von <intTimeout> msec (1/1000 sec) abgelaufen ist. Ohne den Parameter <intTimeout> oder mit dem Wert –1 wird unbegrenzt auf das Ereignis gewartet. Wenn und solange das Ereignis <strEventname> gesetzt ist, kehrt diese Prozedur bei jedem Aufruf sofort zurück, auch wenn zuvor schon Wartezeiten darauf abgelaufen sind.

Wenn das Ereignis unter dem Namen <strEventname> nicht gefunden werden konnte, gibt die Funktion dann einen Wert größer 1 als Fehlercode zurück, sonst den Wert 0 oder 1. Ein Rückgabewert von 1 bedeutet, das der Hamster extern beendet werden soll und die Funktion daher zurückkehrt. Der Fehlercode 258 zeigt den Ablauf der maximalen Wartezeit <intTimeout> an.

Diese Funktion wird also genau wie HamWaitIdle() gebraucht; nur daß auf ein beliebiges, durch seinen Namen gekennzeichnetes und im ersten Parameter zu übergebendes Ereignis gewartet wird.

Die folgenden beiden Funktionen dienen der Signalisierung von Zuständen:

EventSet( <strEventname> )

löst das Ereignis mit dem Namen <strEventname> aus. Das Ereignis bleibt dem Umlegen eines Schalters vergleichbar dauernd ausgelöst, bis es mit EventReset() zurückgesetzt wird. Daher kennzeichnet ein derartig ausgelöstes Ereignis auch einen Zustand.

Wenn das Ereignis unter dem Namen <strEventname> nicht gefunden werden konnte, gibt die Funktion den Wert –1 zurück, sonst den Wert 0.

EventReset( <strEventname> )

setzt das Ereignis mit dem Namen <strEventname> zurück.

Wenn das Ereignis unter dem Namen <strEventname> nicht gefunden werden konnte, gibt die Funktion den Wert –1 zurück, sonst den Wert 0.

Nachdem ein Ereignis durch EventSet() ausgelöst wurde, kehren auch alle späteren auf dieses Ereignis wartenden EventWait()-Aufrufe sofort zurück, bis ein EventReset()-Aufruf erfolgt. Die Funktion

EventPulse( <strEventname> )

löst das Ereignis mit dem Namen <strEventname> aus. Das Ereignis wird danach sofort wieder zurückgesetzt; das Verhalten der damit ausgelösten Ereignisse entspricht einem Taster, der nach Betätigung wieder in seine Ausgangsposition zurückfedert.

Wenn das Ereignis unter dem Namen <strEventname> nicht gefunden werden konnte, gibt die Funktion den Wert –1 zurück, sonst den Wert 0.

Bei einem mit EventPulse() ausgelösten Ereignis kehren lediglich alle vor der Auslösung erfolgten EventWait()-Aufrufe für dieses Ereignis zurück. Spätere Aufrufe warten bis zur nächsten Auslösung.

Der Hamster kennt folgende Ereignisse (Ereignisnamen ohne Mutex-String aus GetProcessIdentifier):

Ereignisname	auslösender Vorgang	Auslösung durch
_main	Hamster läuft.	EventSet()
_mailin	E-Mail-Empfang vom Remote Server empfangen.	EventPulse()
_mailout	E-Mail-Empfang vom lokalen Server mit externen Ziel	EventPulse()
_mailinternal	E-Mail-Empfang vom lokalen Server mit internen Ziel	EventPulse()
_newsout	Artikel-Empfang vom lokalen Server	EventPulse()
_purge	Der Hamster putzt sich	EventSet()
_rasconnected	Aufbau einer DFÜ-Verbindung	EventSet()
_rashang	upTrennung einer DFÜ-Verbindung	EventPulse()

Skripte können aber auch beliebig viele neue Ereignisse definieren. Sie sind mit der Funktion EventCreate() zu deklarieren. Dabei wird ein Name für sie festgelegt, unter dem sie ausgelöst werden können bzw. unter dem auf sie gewartet werden kann.

EventCreate( <strEventname>, <boolReset>, <boolInitial>, <intErrorcode> )

deklariert ein neues Ereignis unter dem Namen <strEventname>. Wird im Parameter <boolReset> 1 übergeben, wird das Ereignis nach dem Ablauf einer Wartezeit darauf automatisch zurückgesetzt. Damit kehrt nur der erste auf das Ereignis wartende EventWait()-Aufruf zurück. Wird in <boolInitial> der Wert 1 übergeben, wird das Ereignis auch sofort ausgelöst.

Die Funktion gibt eine Zahl (Eventhandle) zurück, die zum Löschen des Ereignisses mit EventClose() benötigt wird.

EventClose( <Eventhandle> )

löscht eine Ereignisdeklaration.

Deklaration und Löschung müssen zumindestens im ereignisauslösenden Skript erfolgen. Sie können zusätzlich auch im reagierenden Skript vorgenommen werden, um die Existenz eines Ereignisses sicherzustellen.

EventMultipleWait ( <Timeout> <EventName1> ... <EventName10> )

Wartet auf einen von mehren Events. Wird einer von Mehren Events aktiv liefert diese

Oder tritt ein Timeout auf, liefert diese Funktion folgende Ergebnisse:

1..10    Eintritt des jeweiligen Eventparameters
 0        Stop Script Ereignis aufgetreten
-1        Timeout
-2=Fehler

Diese Funktion ist auf das Zusammenspiel mit den DDL-Funktionen abgestimmt

Das folgende Beispiel realisiert eine Anwendung, die automatisch alle Mailaccounts abfragt und evtl. ausgehende Mails versendet, sobald eine DFÜ-Verbindung hergestellt wird. Sie besteht aus einem Skript Einwahl.hsc, das die DFÜ-Verbindung herstellt und den Erfolg durch die Auslösung eines Ereignisses signalisiert. Ein weiteres Skript Mailexchange.hsc wartet auf dieses Ereignis und führt den Mailexchange durch, sobald es eintritt.

Die beiden folgenden Beispielskripte sind in je einer *.hsc-Textdatei im Skripteverzeichnis des Hamsters unterzubringen. Beide Skriptnamen sollten dann nach dem nächsten Start des Hamsters oder bei laufendem Hamster nach Selektion des Menüs ”Datei”/”Aktualisiere Menüeinträge” im Skriptmenü erscheinen. Das Skript Einwahl.hsc lautet wie folgt:

#!hs2
  # Einwahl.hsc
  # Stellt eine DFÜ-Verbindung her

 var( $try, $err )

  varset( $Tries, 3 )            # Anzahl der Einwahlversuche
  varset( $Connection, "Nexgo" ) # DFÜ-Verbindung

  # 1.) Ereignis deklarieren ...
  # ... Prozeß- und Ereignisnamen bestimmen
 varset( $Proc, GetProcessIdentifier )
  varset( $Event, $Proc + "_rasconnected_" + $Connection )
  # ... Ereignis erzeugen
  varset( $hdlEvent, EventCreate( $Event, 0, 0, $err ) )

  # 2.) Einwahlversuche
 for( $try, 1, $Tries )

    # 2.a) Einwahlversuch
    $err = HamRasDial( $Connection )

    # 2.b) DFÜ-Verbindung brauchbar?
    if( $err = 0 )            # Kein DFÜ-Fehler aufgetreten?

      if( LocalhostAddr = 0 ) # Keine IP-Adresse zugeteilt?
        HamRasHangup          # -> Auflegen, da DFÜ-Verbindung
                              #    ohne IP-Adresse unbrauchbar
      else
        PulseEvent( $Event )  # -> Ereignis auslösen, da Einwahl
                              #    erfolgreich
        break                 #    Einwahlschleife verlassen
      endif

    endif

 endfor

  # 3. Ereignis löschen
  EventClose( $hdlEvent )

  quit

Das Skript deklariert im Abschnitt 1 ein Ereignis mit dem Namen $Event, das die Herstellung der DFÜ-Verbindung des Namens $Connection meldet. Im Abschnitt 2 wird die Einwahl versucht (2.a) und – falls das DFÜ-Netzwerk keine Fehler meldet – die Brauchbarkeit der DFÜ-Verbindung überprüft (2.b). Eine DFÜ-Verbindung ist brauchbar, wenn eine IP-Adresse zugeteilt wurde. Der Abschnitt 2 befindet sich in einer For-Schleife, damit bei fehlschlagender Einwahl mehrere Versuche unternommen werden.

Das Skript Mailexchange.hsc lautet wie folgt:

#!hs2
  # Mailexchange.hsc
  # Fragt POP3-Server ab und veranlaßt den Versand ausgehender Mails

  var( $err )

  # 1.) Ereignis deklarieren ...
  # ... Prozeß- und Ereignisnamen bestimmen
 varset( $Proc, GetProcessIdentifier )
 varset( $Connection, "_Nexgo" )
  varset( $Event, $Proc + "_rasconnected" + $Connection )
  # ... Ereignis erzeugen
  varset( $hdlEvent, EventCreate( $Event, 0, 0, $err ) )

  # 2.) Ereignisschleife
  do

   # 2.a) Ereignis erwarten
    EventWait( $Event, -1 )

    # 2.b) Mailexchange durchführen ...
    # ... Abfrage
    HamFetchMail( "pop3.nexgo.de", "pop3", _
                  "$1", "", "lars.wolschner" )
    # ... Abfrage des lokalen Administrator-Accounts
    #     (wäre auch ohne DFÜ-Verbindung möglich)
    HamFetchMail( "localhost", "pop3", _
                  "$99", "", "lars.wolschner" )
    # ... Versand per SMTP-AUTH
    HamSendMailAuth( "postman.nexgo.de", "smtp", _
                     "$1", "", "lars.wolschner" )

 loop

  # 3. Ereignis löschen
  EventClose( $hdlEvent )

  quit

Im Abschnitt 1. wird das Ereignis deklariert, auf das hier mit dem Mailaustausch reagiert werden soll.

Der Abschnitt 2 besteht aus der Ereignisschleife, die endlos – also bis zur Beendigung des Hamsters – läuft. Bei 2.a kehrt die Funktion EventWait() erst zurück, wenn das deklarierte Ereignis eingetreten ist; bis dahin wartet Mailexchange.hsc.

Das erwartete Ereignis kann erst eintreten, wenn der Nutzer im Skriptmenü auch den Eintrag ”Einwahl” aufruft und damit das Skript Einwahl.hsc startet. Dieses versucht, eine DFÜ-Verbindung herzustellen und löst das Ereignis im Falle erfolgreicher Einwahl aus. Gelingt die Einwahl, ”erwacht” auch das wartende Skript Mailexchange.hsc, weil jetzt dessen EventWait()-Aufruf unter 2.a zurückkehrt. Nun wird dort der Mailexchange durch die Anweisungen unter 2.b ausgeführt.

Da Einwahl.hsc das Ereignis durch EventPulse() auslöst, wird es im Skript Mailexchange.hsc nach der Rückkehr des EventWait()-Aufrufes sofort wieder zurückgesetzt. Wenn die Ereignisschleife im Abschnitt 2 also nach Ausführung der Anweisungen unter 2.b erneut EventWait() aufruft, wartet es bis zur erneuten Herstellung der DFÜ-Verbindung. Anderenfalls würden die Anweisungen unter 2.b fortwährend wiederholt.

Im Skript Mailexchange.hsc kann die Zeile varset( $Connection, "_Nexgo" ) auch durch die Zeile varset( $Connection, "" ) ersetzt werden; das Skript würde damit das durch den Ausdruck GetProcessIdentifier + "_rasconnected" gegebene hamstereigene DFÜ-Einwahlereignis erwarten. Doch das durch Einwahl.hsc deklarierte Einwahlereignis hat den Vorzug, die DFÜ-Verbindung nicht nur herzustellen, sondern auch auf Zuteilung einer IP-Adresse zu überprüfen.

Die beiden Skripte dieses einfach gehaltenen Beispiels kommunizieren praktisch interprozessual durch das mit EventCreate( $Event, 0, 0, $err ) deklarierte Ereignis. Dazu müssen beide Skripte vom gleichen Ereignisnamen ausgehen, also gemeinsame Informationen nutzen. In größeren Projekten empfiehlt es sich daher, die Ereignisnamen durch globale Variablen eines Moduls bereitzustellen. In dessen Initialisierungsteil veranlaßt man auch gleich die erforderlichen EventCreate()-Aufrufe. Damit sind die selbstdefinierten Ereignisse bereits durch einfaches Laden dieses Moduls “gebrauchsfertig” und es ist sichergestellt, daß alle beteiligten Skripte auch nach Namensänderungen die richtigen Bezeichnungen verwenden. Das Modul sollte auch eine Prozedur bieten, die alle selbstdefinierten Ereignisse mit EventClose() wieder löscht.

Source: C:\AA\Src20020607\EnHlp\html\hscr64vg.htm - (191)


Functions, general (Scripts)

Hamster-Scripts: Functions (general)

Translated by Paul Batchie

Function groups:

General functions for Variables

Numeric functions

String functions

Date/time-functions

Error-handling

Files and directories

Lists

Input/Output

Scheduler

RAS-network

Memory/Pointer functions

DLL functions

functions for free-use statusline variables

Miscellaneous functions

General functions for Variables

set( <variable>, <expression> )

<variable> = <expression>

Sets the given <variable> to the result of the <expression>.

The second, more readable form, is only allowed at the beginning of a line, as "=" would be interpreted as the comparison-operator if used in expressions.

Return value: Result of <expression>, i.e. the value the variable was given.

var( $a )
set( $a, 42 )
$a = 42

inc( <variable>, <count> )

inc( <variable> )

inc ( <variable>, <count> )

inc ( <variable> )

dec( <variable>, <count> )

dec( <variable> )

dec ( <variable>, <count> )

dec ( <variable> )

Increments ("inc") or decrements ("dec") the given <variable> by the given <count> or by 1 if <count> is omitted.

Return value: The increased/decreased value of <variable>.

inc( $a )
dec( $a, 2 )

Numeric functions

true

Gives a value representing a boolean value of TRUE.

Please note, that all values other than 0 represent TRUE, so "true" does in fact only give "an example" of a TRUE-value.

Return value: 1

$a = true

false

Gives the value representing a boolean value of FALSE.

Return value: 0

$a = false

isint( <expression> )

Solves the given expression and returns true if the result is an integer.

Return value: 1, if expression represents an integer-value, 0 otherwise

$a = false
$result = iif( isint($a), $a, 0 )

int( <expression> )

Converts the given <expression> into an integer. If it is a string starting with "0x", the rest of the string is considered to be a hex-value.

Return value: Integer-value; 0 if string does not contain a valid integer.

$a = "1"
$b = 2
$c = $a + $b       # -> "12"
$d = int($a) + $b  # -> 3
print( int("0xFF") )  # -> 255

abs( <number> )

Returns the absolute value of <number>.

Return value: Integer.

print( abs( 42) )  # -> 42
print( abs(-42) )  # -> 42

sgn( <number> )

Returns -1 if <number> if negative, +1 if it's positive and 0 if it's 0.

Return value: Integer.

print( sgn( 42) )  # -> 1
print( sgn(-42) )  # -> -1

String functions

isstr( <expression> )

Solves the given expression and returns true if the result is a string.

Return value: 1, if expression represents a string-value, 0 otherwise.

$result = iif( isstr($a), $a, "0x"+hex($a) )

ord( <string> )

Returns the ASCII-number of the first character of <string>.

Return value: Number of the ASCII-code (0 if string is empty).

print( ord("*") )  # -> 42

chr( <number> )

Returns the ASCII-character of <number>.

This function is the opposite of "ord".

Return value: String containing 1 character.

print( chr(42) )  # -> "*"

str( <number>, <length>, <leadchar> )

...

str( <number> )

Converts the given number into a string. If <length> is given, the string is padded with leading <leadchar>'s (default: "0") up to the given length.

Return value: String.

$a = 42
print( str( $a         ) )  # -> "42"
print( str( $a, 5      ) )  # -> "00042"
print( str( $a, 5, " " ) )  # -> "   42"

hex( <number>, <digits> )

hex( <number> )

Converts the given number into hex. If <digits> is given, the string is padded with leading "0"'s up to the given length.

Return value: String.

$a = 42
print( hex( $a, 42 ) )          # -> "002A"
print( int( "0x" + hex(42) ) )  # -> 42

len( <string> )

Returns the length of the given string.

Return value: Integer.

print( len("abc") )  # -> 3

pos( <substr>, <string>, <startpos> )

pos( <substr>, <string> )

Returns the position of <substr> within <string>. If a <startpos> is given, positions lower than this value are ignored.

Return value: Position or 0, if substring not found.

print( pos( "b", "abcde" ) )     # -> 2
print( pos( "b", "abcde", 3 ) )  # -> 0

copy( <string>, <startpos>, <length> )

copy( <string>, <startpos> )

Returns the part of <string>, which starts at <startpos>. If no <length> is given, the rest of the string is returned.

Return value: String.

print( copy( "abcde", 3, 1 ) )  # -> "c"
print( copy( "abcde", 3 ) )     # -> "cde"

delete( <string>, <startpos>, <length> )

delete( <string>, <startpos> )

Deletes the part of <string>, which starts at <startpos>. If no <length> is given, the rest of the string is deleted.

Return value: String.

print( delete( "abcde", 3, 1 ) )  # -> "abde"
print( delete( "abcde", 3 ) )     # -> "ab"
$s = delete( $s, 1, 1 )  # delete 1st char of $s

trim( <string>, <trimchars> )

trim( <string> )

Removes all leading and trailing characters from <string>, that are contained in <trimchars>. If no <trimchars> are given, leading and trailing spaces are removed.

Return value: String.

print( trim("  42  ") )  # -> "42"
$WHITESPACE = " " + chr(9)
print( trim( $line, $WHITESPACE ) )

lowercase( <string> )

Converts all upper-case characters within <string> to lower-case characters.

Return value: String.

print( lowercase( "AbCd" ) )  # -> "abcd"

uppercase( <string> )

Converts all lower-case characters within <string> to upper-case characters.

Return value: String.

print( uppercase( "AbCd" ) )  # -> "ABCD"

replace( <string>, <find>, <replace>, <all>, <ignorecase> )

...

replace( <string>, <find>, <replace> )

Looks for <find> within <string> and, if found, replaces it with <replace>.

If <all> is given and has a value of "true" (any value other than 0), all occurences of <find> are replaced, otherwise only the first.

If <case> is given and has a value of "true" (any value other than 0), upper-/lowercase is ignored for finding.

Return value: String.

print( replace( "abcABCabc", "b", "[X]" )             )  # -> "a[X]cABCabc"
print( replace( "abcABCabc", "b", "[X]", true )       )  # -> "a[X]cABCa[X]c"
print( replace( "abcABCabc", "b", "[X]", true, true ) )  # -> "a[X]cA[X]Ca[X]c"

DecodeMIMEHeaderString( <string>, <charset> )

DecodeMIMEHeaderString( <string> )

Returns the decoded version of a MIME, Base64 or Quoted Printable encoded string. The variable <charset> if available returns the characterset used to encode the string. The returnvalue (after successful decoding) is the 8-bit character string. The 7-bit encoded MIME-characters are replaced by 8-bit characters. The interpretation of the returned string depends only on the with <charset> returned characterset and does not have to correspond to the windows-characterset.

Note! There is no conversion between the charset of the header and the charset which is used by windows!

Example:

Warning(Addlog(DecodeMimeHeaderString("=?ISO-8859-15?Q?0.02=80?="),3))

eval( <string> )

Treats <string> as an expression, solves it and returns its value.

Return value: Integer, Result of expression.

print(       "4" + "+" + "2"   )  # -> "4+2"
print( eval( "4" + "+" + "2" ) )  # -> 6

RE_Match( <string>, <regex> )

Returns TRUE if <string> matches the (PCRE-style) regular expression <regex>.

NOTE: Upper-/lowercase is ignored by default. To make it case-sensitive, precede <regex> with a "(?-i)"-flag.

Return value: TRUE (1) oder FALSE (0)

$answer = "abc4efg2hij"
if( RE_Match( $answer, "4.*2" ) )
   print( "OK, it looks acceptable." )
endif

RE_Extract( <string>, <regex> )

Returns the part of <string>, which matches the (PCRE-style) regular expression <regex>.

NOTE: Upper-/lowercase is ignored by default. To make it case-sensitive, precede <regex> with a "(?-i)"-flag.

Return value: String (empty string, if not found)

$answer = "abc4efg2hij"
print( RE_Extract( $answer, "4.*2" ) )  # -> "4efg2"
print( RE_Extract( $answer, "A.*C"      ) )  # -> "abc"
print( RE_Extract( $answer, "(?-i)A.*C" ) )  # -> ""

RE_Parse( <string>, <regex>, <var1> [ , <var2> ... ] )

Splits <string> into groups defined by (PCRE-style) regular expression <regex>, where a group of characters is placed within parenthesis. First group is stored in variable <var1>, second in <var2> and so on. If a given <var#>-parameter is not a variable, the part is ignored. If <string> does not contain enough groups, the given <vars> are set to empty strings.

NOTE: Upper-/lowercase is ignored by default. To make it case-sensitive, precede <regex> with a "(?-i)"-flag.

Return value: TRUE (1): OK, FALSE (0): Error (e.g. invalid <regex>)

$line = "Subject: This is a test"
RE_Parse( $line, "(\S+:)\s+(.*)", $a, $b )  # -> $a="Subject:", $b="This is a test"

RE_Split( <string>, <regex>, <var1>, <var2> [ , <var3> ... ] )

Splits <string> into parts separated by the (PCRE-style) regular expression <regex>. First part is stored in variable <var1>, second in <var2> and so on. Last variable always receives the remainder of the string, even if it contains further parts separated by <regex>. If a given <var#>-parameter is not a variable, the part is ignored. If <string> does not contain enough parts, the remaining <vars> are set to empty strings.

NOTE: Upper-/lowercase is ignored by default. To make it case-sensitive, precede <regex> with a "(?-i)"-flag.

Return value: TRUE (1): OK, FALSE (0): Error (e.g. invalid <regex>)

$line = "this  is    a   test"
RE_Split( $line, " +", $a, $b )      # --> $a="this", $b="is    a   test"
RE_Split( $line, " +", $a, $b, $c )  # --> $a="this", $b="is", $c="a   test"

Date/time-functions

ticks

Retrieves the number of milliseconds that have elapsed since Windows was started.

Return value: Integer.

$start = ticks
# ...
$stop = ticks
print( "It took: ", $stop - $start, " ms." )

time

Retrieves the current date and time (local time), in Unix-format, that is seconds since 01.01.1970).

Return value: Integer (Unix-format, i.e. seconds since Jan 1st 1970).

$now = time
$yesterday = $now - 24*60*60

timegmt

Retrieves the current date and time (GMT) in Unix-format, that is seconds since 01.01.1970).

Return value: Integer (Unix-format, i.e. seconds since Jan 1st 1970).

$nowgmt = timegmt

RFCTimeZone

Returns the time-difference between GMT (Greenwich Mean Time) and your local time, if appropriate corrected for summertime.

Return value: String

For Germany the return value is +100 resp. +0200 for winter resp. summer time.

decodetime( <time>, <yyyy>, <mm>, <dd>, <hh>, <nn>, <ss>, <wd> )

...

decodetime( <time>, <yyyy> )

Decodes the given <time> (time in Unix-time-format). Other parameters are ignored, unless they are variables. In this case, the given variable is set to one of the decoded values: <yyyy> (year), <mm> (month), <dd> (day), <hh> (hour), <nn> (minute), <ss> (seconds), <wd> (day of week; 1=Sunday, ..., 7=Saturday).

Return value: <time>

var( $hrs, $min, $sec )
decodetime( time, 0, 0, 0, $hrs, $min, $sec )
print( "Current time: ", $hrs, ":", $min, ":", $sec )

encodetime( <yyyy>, <mm>, <dd>, <hh>, <nn>, <ss> )

Returns a time-value (time in Unix-format) build from the given parameters.

Parameters: <yyyy> (year), <mm> (month), <dd> (day), <hh> (hour), <nn> (minute), <ss> (seconds).

Return value: <time>

encodetime( 2000, 12, 31, 23, 59, 59 )

Error-handling

ErrCatch( <on/off> )

ErrCatch

If <on/off> is TRUE (<>0), error-catching is enabled. This means, that all errors, which normally stop the script immediately, are ignored by the script-engine and must be handled by the script itself. If an error happens in this state, function "ErrNum" will return a non-zero value. If <on/off> is FALSE (=0), error-catching is disabled again, i.e. the script will be stopped again if an error happens. ErrCatch "ErrCatch" without parameters just returns the current state. It may be used to preserve the current state while executing a "dangerous" part of a script. Returns: 0/False: Disabled (default; i.e. stop on errors), 1/True: Enabled (ignore errors)

Return value: 0/False: Disabled (default; i.e. stop on errors), 1/True: Enabled (ignore errors)

$OldErrCatch = ErrCatch
ErrCatch( True )
print( 42/0 )  # division by zero causes error
if( ErrNum<>0 )
   print( "Error: ", ErrNum, " ", ErrMsg )
endif
ErrCatch( $OldErrCatch )

SysErrorMessage( <errnumber> )

This function returns the error-text for the given Windows-System-Error Code <errnumber>.

ErrNum

Returns error-number of last error.

NOTE: Do not rely on the numbers returned, they might be changed in a future version.

Return value: Integer (=0: No error, <>0: Error)

if( ErrNum <> 0 )
   # ...
endif

ErrMsg

Returns error-description of last error.

Return value: String

print( ErrMsg )

ErrModule

Returns name of module in which the last error occured.

Return value: String

print( ErrModule )

ErrLineNo

Returns line number within module in which last error occured.

Return value: Integer

print( ErrLineNo )

ErrLine

Returns script-line which raised last error.

Return value: String

print( ErrLine )

ErrSender

Returns the name of the script-object which raised last error.

Return value: String

print( ErrSender )

Files and directories

execute( <cmdline>, <workdir>, <show>, <wait>, <exitcode> )

Starts the program given in <cmdline>, which also can contain parameters and options needed by this program. If <workdir> is given, it is set as the workding-directory for the started program. <show> controls, how the started program is shown (0=hidden, 1=default=normal, 2=minimized, 3=maximized). If <wait> is set to true (default), execution of the script is paused until the started program has finished, otherwise it proceeds immediately with the next command. If the exit-code of the program is needed, it can be saved in the variable <exitcode>. Please note that this functino uses the command-line API from Windows and as such is similar to manual execute the called program by command-line. The return-value of this function is the result of the Windows API, not the result of the called program. The variable <exitcode> returns value –1 if the Windows API resulted in an error. Thence is always the status of both variables <exitcode> and function-result to be tested. If the function is stopped by a user-enforced stop-script the function-result will be –1.

Return value: Integer (0=no error, <>0=error)

execute( "notepad.exe myfile.cfg" )

IniRead( <filename>, <section>, <ident>, <default> )

Reads an entry from the .INI-file named <filename>. If no <filename> is given, file "HScripts.ini" is used. If no <section> is given, section "[All]" is used. If "[<section>]" does not contain an entry named "<ident>=...", the value <default> is returned.

Return value: String

$answer = IniRead( "MyScript.ini", "Antwort", "Last", "42")
$LastConnected = int( IniRead( "", "", "LastConnected", 0 ) )

IniWrite( <filename>, <section>, <ident>, <value> )

Writes an entry to the .INI-file named <filename>. If no <filename> is given, file "HScripts.ini" is used. If no <section> is given, section "[All]" is used.

Return value: Integer 0 = OK no error, -1 = error

IniWrite( "MyScript.ini", "Answers", "Last", $answer )
IniWrite( "", "", "LastConnected", time )

IniEraseSection( <filename>, <section> )

Removes the entire secion <section> from Ini-file <filename>.

Return value: Integer 0 = OK no error, -1 = error

IniDelete ( <filename>, <section> >ident> )

Removes in section <section> of Ini-file <filename> the line with key <ident>.

Return value: Integer 0 = OK no error, -1 = error

FileExists( <filename> )

Checks, if the given file exists. <filename> may contain wildcards "?" and "*".

Return value: Integer (1=exists, 0=doesn't exist or invalid filename/path)

if( !fileexists("myfile.cfg" ) )
   error( "Missing configuration file!" )
endif

DiskFreeKB( <DriveLetter> )

Returns the free space in Kilobytes on a drive.

In case of a wrong parameter the value -1 is returned.

The drive must be entered as the drive-letter in the operating system.

Return value: Integer (-1 in case of error)

DiskFreeKB(”C”)

FileSize( <filename> )

Returns size in bytes of file <filename>.

Return value: Integer (-1 in case of error)

print( FileSize( HamPath + "Hamster.exe" ) )

FileTime( <filename> )

Returns time of last update of file <filename> (time in Unix-format).

Return value: Integer (-1 in case of error)

print( "Your Hamster's age: ", time - FileTime( HamPath + "Hamster.exe" ), " seconds" )

FileDelete( <filename> )

Deletes the file named <filename>.

Return value: 0: OK, <>0: Error

FileDelete( "MyScript.tmp" )

FileRename( <oldname>, <newname> )

Renames the file named <oldname> to <newname>.

Return value: 0: OK, <>0: Error

FileRename( "MyScript.dat", "MyScript.bak" )

FileCopy( <oldname>, <newname> )

Copies the file named <oldname> to <newname>.

Note: Wildcards (* ?) are not allowed with this function.

Return value: 0: OK, <>0: Error

FileCopy( "MyScript.dat", "MyScript.bak" )

DirExists( <dirname> )

Checks, if the directory <dirname> exists. If no absolute path is given, the path given will be used as path relative to the current directory.

Return value: Integer (1=exists, 0=doesn't exist or invalid path)

if( !direxists( "mydir" ) )
   # ...
endif

DirMake( <dirname> )

Creates a new directory named <dirname>. If no absolute path is given, the path given will be used as path relative to the current directory.

Return value: 0: OK, <>0: Error

DirMake( HamPath + "MyScript" )

DirRemove( <dirname> )

Removes the directory named <dirname>, if it is an empty directory. If no absolute path is given, the path given will be used as path relative to the current directory.

Return value: 0: OK, <>0: Error

DirRemove( HamPath + "MyScript" )

DirChange( <dirname> )

Makes the directory named <filename> the current directory.

NOTE: Not suggested, use filenames with full path instead.

Return value: 0: OK, <>0: Error

DirChange( HamPath + "MyScript" )

DirCurrent

Returns the name of the current directory. The name is always returned with a trailing backslash.

Return value: String

print( DirCurrent )

DirWindows

Returns the name of the Windows directory. The name is always returned with a trailing backslash.

Return value: String

print( DirWindows )

DirSystem

Returns the name of the Windows system directory. The name is always returned with a trailing backslash.

Return value: String

print( DirSystem )

See also: ListLoad, ListSave, ListFiles, ListDirs.

Lists

ListAlloc( <sorted>, <duplicates> )

...

ListAlloc

Creates a new list of strings and returns a unique handle for it. This handle is noted as <list> in the other list-functions described below and is valid until the list if freed again with "ListFree". Every allocated list must be freed to avoid memory losses.

If <sorted> is set to TRUE (<>0), the list is automatically sorted when adding new entries (default is: not sorted). If <duplicates> is set to TRUE (<>0), duplicate entries are allowed and will be accepted (default), otherwise they will be ignored, so each entry becomes unique. Note, that this only works for sorted lists.

Return value: >=0: list-handle, -1: too many lists.

$list = ListAlloc

ListFree( <list> )

Frees a list created by "ListAlloc", memory is released and the handle becomes invalid. See also "ListAlloc".

Return value: 0: OK, -1: invalid list-handle

listfree( $list )

ListExists( <list>, <index> )

ListExists( <list> )

Checks, if <list> points to a valid list. If <index> is given, it also checks, if the list has an entry for this index.

Return value: 1/true: is valid; 0/false: invalid

sub DoSomethingWithList( $list )
   if( !ListExists( $list )
      error( "List expected!" )
   endif
   # ...
endsub

ListClear( <list> )

Deletes all entries in the given list.

Return value: 0: OK, -1: invalid list-handle

ListClear( $list )

ListCount( <list> )

Returns the number of entries in list <list>.

Return value: Integer, number of list-entries

print( ListCount( $list ) )

ListGet( <list>, <index> )

Returns the list-entry (string) with the given <index>. Entries are numbered from 0 to (ListCount-1).

Return value: String (empty string, if list or index was invalid)

$i = 0
while( $i < ListCount($list) )
   print( $i, ": ", ListGet($list,$i) )
   inc( $i )
endwhile

ListSet( <list>, <index>, <value> )

ListSet( <list>, <index> )

Changes the value of the list-entry at <index>. If no <value> is given, it is set to an empty string. If the list does not contain enough entries yet, they are automatically created as empty strings, so the list can be used like an open array of strings.

Return value:<value>

ListSet( $list, 42, "The answer!" )

ListGetTag( <list>, <index> )

Returns the "Tag"-value of the string at the given <index>. A "Tag"-value is just a number associated with each entry. Every list-entry has a "Tag"-value with a default of 0.

Return value: Integer

$entry_itself = ListGet( $list, 42 )
$tag_of_entry = ListGetTag( $list, 42 )

ListSetTag( <list>, <index>, <tag> )

Sets the "Tag"-value of the string at the given <index>.

Return value: <tag>

$index = ListAdd( $list, "The answer!" )
ListSetTag( $list, $index, 42 )

ListGetKey( <list>, <key> )

If the list contains strings in the form "key=value", this command returns the value of key <key>.

Return value: String

# see example under ListSetKey

ListSetKey( <list>, <key>, <value> )

ListSetKey( <list>, <key> )

If the list contains strings in the form "key=value", this command sets the value of key <key>. If no value is given, it is set to an empty string.

Return value: <value>

$list = ListAlloc
ListSetKey( $list, "RTFM", "Read the f... manual!" )
ListSetKey( $list, "SCNR", "Sorry, could not resist!" )
print( ListGetKey( $list, "SCNR" ) )

ListAdd( <list>, <value> )

ListAdd( <list> )

Appends a new entry with the given <value> (default: empty string).

Return value: Index of new entry.

$index = ListAdd( $list, $text )

ListDelete( <list>, <index> )

Deletes the entry with the given <index>. The entries with a higher index will shift accordingly.

Return value: 0

ListInsert( <list>, <index>, <value> )

ListInsert( <list>, <index> )

Inserts a new entry with the given <value> (default: empty string) at the given <index> The entries with a higher index will shift accordingly.

Return value: 0

ListInsert( $list, 0, $text )

ListSort( <list> )

Sorts list <list> by its values.

Returns: 0

ListSort( $list )

ListSetText( <list>, <text> )

Clears the list and adds an entry for each line of <text>, which is separated by CR+LF.

Return value: <text>

ListSetText( $list, $article )
print( ListGet( $list, 0 ) )  # -> first line of $article

ListGetText( <list> )

Returns a CR/LF-separated text-string containing all list-entries.

Return value: String

$article = ListGetText( $list )

ListIndexOf( <list>, <value> )

Returns the index of the list-entry, which equals <value>.

Return value: >=0: Index, -1: index not found

ListSetText( $list, $article )
$EndOfHdr = ListIndexOf( $list, "" )

ListLoad( <list>, <textfile> )

Loads the given <textfile> and creates a list-entry for each line of the file in <list>.

Return value: 0: OK, -1: invalid list-handle, =2 insufficient accessrights, -3 file not found.

ListLoad( $list, "MyScript.cfg" )

ListSave( <list>, <textfile> )

Saves the list <list> in the given <textfile>.

Return value: 0: OK, -1: invalid list-handle, =2 insufficient accessrights.

ListSave( $list, "MyScript.cfg" )

ListAppend( <list>, <textfile> )

Appends the text of list <list> to the textfile <textfile> if this file exists. If this file does not exist it will be created automatically.

Return value: 0: OK, -1: invalid list-handle, =2 insufficient accessrights.

ListAppend( $list, "MyScript.cfg" )

ListFiles( <list>, <filemask>, <fullpath> )

ListFiles( <list>, <filemask> )

Fills the list with the filenames selected by <file-mask>.

If <fullpath> is given and TRUE (<>0), all files are expanded with their full pathname, otherwise only the filenames are returned.

Return value: >=0: OK (number of files), <0: list invalid or file not found

ListFiles( $list, HamPath + "Mails\Mail.Out\*.msg", true )

ListDirs( <list>, <filemask>, <fullpath> )

ListDirs( <list>, <filemask> )

Fills the list <list> with the directory-names selected by <file-mask>.

If <fullpath> is given and TRUE (<>0), all directory-names are expanded with their pathname, otherwise only the names are returned.

Return value: >=0: OK (number of directories), <0: list invalid or no directories found

ListDirs( $list, HamPath + "Mails\*." )

ListRasEntries( <list> )

Fills the list <list> with the names of all RAS-network-entries (phonebook for RAS-networks).

Return value: >=0: OK (number of entries), <0: list invalid or error

var( $RasConnection )
$RasConnection = SelectRasConnection
if( $RasConnection <> "" )
   print( "Dialing ", $RasConnection )
   # ...
endif
quit

sub SelectRasConnection
   var( $RasList, $RasSelIndex, $RasSelName )
   $RasSelName = ""
   $RasList = ListAlloc
   if( ListRasEntries( $RasList )>0 )
      $RasSelIndex = ListBox( $RasList, "Select connection to use:" )
      if( $RasSelIndex >= 0 )
         $RasSelName = ListGet( $RasList, $RasSelIndex )
      endif
   endif
   ListFree( $RasList )
   return( $RasSelName )
endsub

Input/Output

print( <text> [ , <text> ...] )

Displays the given text in the Hamster log window.

When used in Hamster, the text is shown as an "Info" (black on white) in the Log-window.

Return value: <text>.

print( "And the correct answer is: ", $answer )

warning( <text> [ , <text> ...] )

Same as "print", but the text is displayed in a way that makes it look "more important". When used in Hamster, the text is shown as a "Warning" (black on yellow) in the Log-window, so it's displayed even if informational messages are disabled there. As a rule of thumb: A user should never see such a warning under normal circumstances.

Return value: <text>.

warning( "Brain malfunction! No ideas left! Example halted!" )

Addlog( <text> , x [, ScriptName] )

Acts like 'print', only the type of log entry can be set with the variable x. The parameter <ScriptName> determines whether the script name appears in the log.

Valid values for x:

1=Debug
2=Detail
3=Info
4=System
5=Warning
6=Error

Return value: <text>.

Addlog( "Brain malfunction! No ideas left! Example halted!", 5 )

HamRotatelog

Starts a new logfile.

MsgBox( <text>, <caption>, <style> )

...

MsgBox( <text> )

Displays a message-box with the given <text> and <caption>.

<style> is a number, which determines the type of message-box and the buttons displayed (default: "Information" with "OK"-button).

Valid types are: 0x40 (Information), 0x30 (Warning), 0x20 (Question), 0x10 (Error)

Valid buttons are: 0x0 (OK), 0x1 (OK+Cancel), 0x2 (Abort+Retry+Ignore), 0x3 (Yes+No+Cancel), 0x4 (Yes+No), 0x5 (Retry+Cancel)

To preselect a specific button add 0x100 for the second or 0x200 for the third button.

The following values are predefined in module hwindows.hsm.

# MsgBox-Style
varset( $MB_OK,                        0x00000)
varset( $MB_OKCANCEL,                  0x00001)
varset( $MB_ABORTRETRYIGNORE,          0x00002)
varset( $MB_YESNOCANCEL,               0x00003)
varset( $MB_YESNO,                     0x00004)
varset( $MB_RETRYCANCEL,               0x00005)
varset( $MB_ICONHAND,                  0x00010)
varset( $MB_ICONQUESTION,              0x00020)
varset( $MB_ICONEXCLAMATION,           0x00030)
varset( $MB_ICONASTERISK,              0x00040)
varset( $MB_USERICON,                  0x00080)
varset( $MB_ICONWARNING,               0x00030)
varset( $MB_ICONERROR,                 0x00010)
varset( $MB_ICONINFORMATION,           0x00040)
varset( $MB_ICONSTOP,                  0x00010)
varset( $MB_APPLMODAL,                 0x00000)
varset( $MB_SYSTEMMODAL,               0x01000)
varset( $MB_TASKMODAL,                 0x02000)
varset( $MB_HELP,                      0x04000)
varset( $MB_NOFOCUS,                   0x08000)
varset( $MB_SETFOREGROUND,             0x10000)
varset( $MB_DEFAULT_DESKTOP_ONLY,      0x20000)
varset( $MB_TOPMOST,                   0x40000)
varset( $MB_RIGHT,                     0x80000)

Return value: 0=(error), 1=OK, 2=Cancel, 3=Abort, 4=Retry, 5=Ignore, 6=Yes, 7=No

if( MsgBox( "Do you like silly questions?", "", 0x20|0x4 ) = 6 )
   Error( "Unexpected answer." )
else
   MsgBox( "Then get used to ..." )
endif

PopupBox( <text>, <caption>, <style>, <timeout>, <default> )

Displays a popup-box with the given <text> and <caption>.

<style> is a number, which determines the type of popup-box and the buttons displayed (default: "Information" with "OK"-button).

If no button is pressed, the window will close automatically after <timeout> seconds (max. 4.194.304) and will return with the value <default>. (Default no button is selected).

Valid types are: 0x40 (Information), 0x30 (Warning), 0x20 (Question), 0x10 (Error)

Valid buttons are: 0x0 (OK), 0x1 (OK+Cancel), 0x2 (Abort+Retry+Ignore), 0x3 (Yes+No+Cancel), 0x4 (Yes+No), 0x5 (Retry+Cancel)

Return value: 0=(error), 1=OK, 2=Cancel, 3=Default, 4=Retry, 5=Ignore, 6=Yes, 7=No

Bsp:
var ( $result )
$result = PopupBox( "Is there anybody?", "Hello!", 0x04, 5, 3 )
icase( $result, 3, print( "There is nobody here." ), _
                6, print( "I am not alone." ), _
                7, print( "Liar!" ) )

The following values are predefined in module hwindows.hsm.

# MsgBox-Style
varset( $MB_OK,                        0x00000)
varset( $MB_OKCANCEL,                  0x00001)
varset( $MB_ABORTRETRYIGNORE,          0x00002)
varset( $MB_YESNOCANCEL,               0x00003)
varset( $MB_YESNO,                     0x00004)
varset( $MB_RETRYCANCEL,               0x00005)
varset( $MB_ICONHAND,                  0x00010)
varset( $MB_ICONQUESTION,              0x00020)
varset( $MB_ICONEXCLAMATION,           0x00030)
varset( $MB_ICONINFORMATION,           0x00040)
varset( $MB_USERICON,                  0x00080)
varset( $MB_ICONERROR,                 $MB_ICONHAND)
varset( $MB_ICONSTOP,                  $MB_ICONHAND)
varset( $MB_ICONASTERISK,              $MB_ICONINFORMATION)
varset( $MB_ICONWARNING,               $MB_ICONEXCLAMATION)
varset( $MB_SYSTEMMODAL,               0x01000)
varset( $MB_TOPMOST,                   0x40000)

InputBox( <text>, <caption>, <default>, <code> )

...

InputBox( <text> )

Displays a window with the given <text> and <caption>. The window contains a text-box which is initialized with <default> (empty string if omitted).

If given, the variable <code> is set to 1 (true) if OK was pressed, and set to 0 (false) otherwise.

Return value: Text entered or empty string if cancelled.

$answer = InputBox( "What's the answer ...?", "", "42", $ok )

InputPW( <text>, <caption>, <default>, <code> )

...

InputPW( <text> )

Displays the text <text> in a text input box, with the heading <caption>. The input line is preset with the <default> text, veiled with asterisks. The variable <code> returns the user's dialog action:

1 (True), if the command button "OK" is chosen

0 (False) if the command button "Cancel" is chosen.

Return value: character string or empty string if cancelled.

$answer = InputPW( "What's the answer ...?", "", "42", $ok )

ListBox( <list>, <text>, <caption>, <default>, <code> )

...

ListBox( <list>, <text> )

Displays a listbox-window with the given <text> and <caption>. The window contains a list-box which is initialized with the strings of list <list>. If <default> is given (default: -1, = no pre-selection) and there's an entry in <list> with this index, it is pre-selected.

If given, the variable <code> is set to 1 (true) if OK was chosen, and set to 0 (false) otherwise.

Return value: Index of selected list-entry or <default> if cancelled.

var( $list, $selindex )
$list = ListAlloc
ListAdd( $list, "41" )
ListAdd( $list, "42" )
ListAdd( $list, "43" )
$selindex = ListBox( $list, "What's the answer ...?" )
print( iif( $selindex=1, "Correct!", "Wrong!" ) )
ListFree( $list )

Scheduler

AtClear

Clears all scheduler entries.

Return value: 0

# see example under AtAdd

AtCount

Returns the number of entries in the scheduler.

Return value: Integer

AtSubfunction( <Index> )

Returns the Subroutine name of the scheduler entry <index>.

Return value: String

AtFrom ( <Index> )

Returns the starttime of the scheduler entry <index>.

Return value: String

AtUntil ( <Index> )

Returns the end-time of the scheduler entry <index>.

Return value: String

AtOnDays ( <Index> )

Returns the weekdays-string of the scheduler entry <index>.

Return value: String

AtEveryMins ( <Index> )

Returns the wait-time of the scheduler entry <index>.

Return value: Integer

AtAdd( <subname>, <from>, <til>, <wdays>, <repeat>, <immediate> )

...

AtAdd( <subname>, <from> )

Adds a new scheduler entry.

The variable <subname> gives the name of a user-defined Subroutine, which is startet when the entry is triggered by "AtExecute". This subroutine-name can not be replaced by a variable parameter.

The variables <from> and <til> contain the time-interval, in which the entry is triggered (default for <til> is <from>; format for both is "HH.MM") and the set function will be executed once or repeated.

The variable <wdays> is a string of 7 characters which contains a marker for each day of the week for which the entry is valid (, "0"=invalid, "1"=valid; first char=Monday, ..., seventh char=Sunday; default="1111111").

If a script is started at a time, for which one of the entries is valid, <subname> is called immediately by default.

The variable <repeat> if set, must contain a value greater than 0. This will cause the entry to be triggered every <repeat> minutes.

The boolean variable <immediate> determines if the subroutine will be started directly after adding or waits for the first cycle to complete. Default is True="start immediately". If <immediate> is set to 0 (false), it is assumed that this event already happened at the time, the entry was added.

Note: A cycle starts always with the actual minute.

Return value: Index of new entry.

AtClear
AtAdd( getmails, "00:00", "06:00", "1111100", 60, true )
AtAdd( getmails, "06:00", "18:00", "1111100", 15, true )
AtAdd( getmails, "18:00", "24:00", "1111100", 60, true )
AtAdd( getmails, "12:00", "",      "0000011" )
AtAdd( getnews,  "03:15" )
AtAdd( getnews,  "18:45" )
AtExecute
quit

sub getmails
   # ...
endsub

sub getnews
   # ...
endsub

AtExecute( <timeout> )

AtExecute

Waits until one of the scheduler-entries added by "AtAdd" is triggered, executes its accompanying sub-function and if this function returns 0, it continues to wait for the next entry to come. The variable <timeout> gives the maximum time in milliseconds (1/1000 seconds), AtExecute should wait for the next entry.

Return value: -1=timeout, >0: return-value of last executed subroutine.

# see example under AtAdd

RAS-network

RasGetConnection

Returns the name (phonebook-entry) of current RAS-connection.

Return value: Name of RAS-connection; "" if not connected.

print( RasGetConnection )

RasLastError

Returns the error-state of the last RAS-network connection.

Return value: Integer

print( RasLastError )

RasErrText

Returns the error-text for the error-state of the last RAS-network connection.

Return value: String

print( RasErrText )

Note: After closing a RAS-network connection the modem and other RAS-hardware need a certain amount of recovery-time. The effect is that after disconnecting it takes some time before this funtion returns the correct state. The effective time for this delay depends on the actual hardware.

RasIsConnected

Checks current connection-state.

Note: After closing a RAS-network connection the modem and other RAS-hardware need a certain amount of recovery-time. The effect is that after disconnecting it takes some time before this funtion returns the correct state. The effective time for this delay depends on the actual hardware.

Return value: 1 (true) if connected, 0 (false) otherwise.

Sleep(1000)
if( !RasIsConnected )
   # dial
endif

RasDial( <name>, <user>, <pass>, <connid> )

...

RasDial( <name> )

Dials the RAS-connection named "<name>" and tries to authenticate with username <user> and password <pass>. The connection-handle may optionally be saved in variable <connid>. The name of the RAS-network connection must be defined in the Control Panel under RAS-network (phonebook for RAS-network). Remark: This is case-sensitive.

Note: This function does NOT support any of Hamster's password-options! You have to use the Hamster-specific functions "HamRasDial" and "HamRasHangup" if you want to use them!

Return value: 0: connected; >0: RAS error-code; -1: RAS not installed

$try = 1
while( RasDial("MyProvider","MyUsername","MyPassword") != 0 )
   if( $try >= 3 )
      error( "Dialing failed!" )
   endif
   inc( $try )
   sleep( 10000 )
endwhile

RasHangup( <connid> )

RasHangup <</font>

Terminates an existing RAS-connection. If no specific <connid> is given, any current connection is terminated.

Return value: 0: OK; >0: RAS error-code; -1: RAS not installed

RasHangup

RasGetIP

Returns the (in most cases dynamically) assigned IP address of current RAS connection. This IP address is usually determined by the Internet Provider.

Return value: IP as string; empty string if not connected.

print( RasGetIP )

See also the function: ListRasEntries

Memory/Pointer functions

MemAlloc( <size> )

Allocate memory of size <size> bytes and return a pointer to this memory location.

MemSize( <ptr> )

Returns the size of the memoryblock pointed to by pointer <ptr>.

MemFree( <ptr> )

Releases the memoryblock pointed to by pointer <ptr>.

MemForget( <ptr> )

Clears the memory pointed to by pointer <ptr> without releasing this memory.

MemSetInt( <ptr> , <int> )

Writes the value of integer variable <int> into the memory pointed to by pointer <ptr>.

MemGetInt( <ptr> )

Returns the integer value stored at the memory location pointed to by pointer <ptr>.

MemSetStr ( <ptr> , <str> , [ <len> ] )

Writes the contents of string variable <str> into the memory pointed to by pointer <ptr>. Attention, this assumes a null-terminated string if the parameter <len> is not used. The optionally parameter <len> determines the length of the string to be copied

MemGetStr ( <ptr> , [ <len> ] )

Returns the string from the memory pointed to by pointer <ptr>. The length of the string to be copied can optionally be entered with parameter <len>. Attention, this assumes a null-terminated string if the parameter <len> is not used.

MemVarPtr ( <variable> )

Returns a pointer to the memory location of the variable <variable>.

DLL functions

DLLLoad( <Name> )

Loads the DLL <Name> in to memory and returns a handle to the loaded DLL. Loading of system libraries (e.g. "kernel32.dll") is not needed and should not be done

Return value: <>0: Handle of the DLL, =0: Error (see DllLastError)

DLLFree( <Handle> )

Releases the handle <Handle> for a DLL.

DLLLastError

Returns the last error status of the DLL-functions.

DLLCall( <Declaration>, [par1...par11] )

DLLCall( <Declaration>, [par1] )

Calls a functions in a DLL. If the DLL is not yet loaded then it will automatically be loaded temporary. If the functions of a DLL are used frequently it is better to load the DLL permanent into memory with the function DllLoad. This gives a better performance. Loading of system libraries (e.g. "kernel32.dll") is not needed and should not be done

The parameter <Declaration> must contain the four fields necessary for the activation, separated by vertical lines (|), in the following form:

Declare=“DDL_Name|Function_Name|Result_Type|Parameter_Type“

DLL_Name            must be a valid filename.
Function_Name       must be an in DLL-Name available function.
Result_Type         must reflect the type of return-value of the function.
                    The following values are hereby allowed:
                    n=Integer
                    v=no return value available
Parameter_Type      n=immediate return value as Integer
                    v=Function has no return value.
                      This parameter is only permitted at the first position in the field.
                    1=Buffer a Callbackfunction Type 1 with one parameter.
                      This parameter is only permitted at the first position in the field.
                    2=Buffer a Callbackfunktion Type 2 with two parameters.
                      This parameter is only permitted at the first position in the field.

Examples:

   # HWND GetForegroundWindow(VOID)
   varset( $ApiGetForegroundWindow, "user32.dll|GetForegroundWindow|n|v" )

   # int GetWindowText( HWND hWnd, LPTSTR lpString, int nMaxCount )
   varset( $ApiGetWindowText, "user32.dll|GetWindowTextA|n|nnn" )

   # BOOL SetWindowText( HWND hwnd, LPCTSTR lpsz )
   varset( $ApiSetWindowText, "user32.dll|SetWindowTextA|n|nn" )

   # BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam )
   # [ BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ) ] => type '2'
   varset( $ApiEnumWindows, "user32.dll|EnumWindows|n|2n" )

Self-defined statusline variables:

Besides the variables for statusline with fixed meaning there are variables available without special meaning.

These can be shown in the statusline of Hamster with the wildcards %X0 to %X9.

Example: Such a counter can be used as progress-indicator of a running script.

There are several functions available for use and maintenance of these variables.

XCounter( <Number> )

Returns the value of the statusline variable <Number>.

ClearXCounter( <Number> , <end_Number> )

ClearXCounter( <Nummer> )

Deletes the value of the statusline variables <Number> up to <end_Number>.

SetXCounter( <Number> , <Value> )

Changes the value of statusline variable <Number> to the new value <Value>.

DecXCounter( <Nummer>, <Value> )

DecXCounter( <Nummer> )

Decreases the value of statusline variable <Number> with the amount of <Value>.

IncXCounter( <Nummer> , <Value> )

IncXCounter( <Nummer> )

Increases the value of statusline variable <Number> with the amount of <Value>.

Miscellaneous functions

HamChangePassword( <AccountName>, <OldPW>, <NewPW> )

Changes the password for a local user:

Return value: 0 = error in old password, 1 = password changed, 2 = error changing password.

GetEnvironment( <Variablenname> )

or GetEnv( <Variablenname> )

Returns the value for the given environment-variable.

GetEnv("WinDir") # for example will return the path for the main-windows-directory.

ClipRead()

Returns the contents of the clipboard as text.

ClipWrite( <text> )

Writes the text <text> to the clipboard.

Note: Scripts for general use should avoid using the ClipWrite-Function or clearly indicate the use of the clipboard, because the contents of the clipboard is usually only changed by the user and not by programs!

GetProcessIdentifier

Returns a string which uniquely identifies the current Hamster-instance (Mutex).

random( <maximum> )

Returns a pseudo-random-number between 0 and <maximum>.

Attention! This function is only cryptographic secure when using the OpenSSL libraries.

ScriptPriority( <priority > )

Changes the priority of own scripts. Possible values are predefined in module hwindows.hsm:

$THREAD_PRIORITY_IDLE          = 0
$THREAD_PRIORITY_LOWEST        = 1
$THREAD_PRIORITY_BELOW_NORMAL  = 2
$THREAD_PRIORITY_NORMAL        = 3
$THREAD_PRIORITY_ABOVE_NORMAL  = 4
$THREAD_PRIORITY_HIGHEST       = 5
$THREAD_PRIORITY_TIME_CRITICAL = 6

Attention, the use of $THREAD_PRIORITY_TIME_CRITICAL can in certain circumstances cause a system lockup. Before using this parameter be sure to test the script thoroughly.

digest( <type> , <string> , <form> )

Returns a cryptographic Digest (Fingerprint) e.g. the checksum of a string <string> in the format <form>.

Possible types for <type> are:

0 (CRC32, Integer),
1 (MD5, characterstring with 16 characters),
2 (SHA1, characterstring with 20 characters).

Possible values for <form>:

0 = String
1 = String with hexadecimal contents.

Return value: Integer or string for CRC32 and string for MD5 or SHA'1.

paramcount

Returns the number of parameters transferred to a script when starting.

paramstr( <index> )

Returns the parameter with index number <index> of the parameters transferred to the script when starting. The first parameter has the index '1', With Index '0', the script name is returned.

SetTaskLimiter( <limit> )

Sets the maximum number of tasks which can be processed simultaneously (for connections to provider) to <limit> and returns the previous set value.

GetTasksActive

The number of active tasks is returned.

GetTasksWait

The number of waiting tasks is returned.

GetTasksRun

The number of current tasks is returned.

StopThread ( <ThreadID> )

Stops the thread with thread-identifier <ThreadID>.

Return value: 0 = thread is stopped, -1 = error.

SetHostsEntry_ByName( <hostname>, <IP-address> )

Enters the IP address to a host name into the hosts file. If the parameter <IP address> is empty, the entry is removed from the hosts file.

SetHostsEntry_ByAddr( <IP-address>, <hostname> )

Enters the host name to an IP address into the hosts file. If the parameter <hostname> is empty, the entry is removed from the hosts file.

DeleteHostsEntry ( <hostname>, <IP-address> )

Removes the entry with the parameters <hostname>, <IP address> from the hosts file.

Localhostname

Returns the host names of the local network interface.

localhostaddr

Returns the IP address of the local network interface.

lookuphostaddr( <hostname> )

Returns the IP-address for a hostname requested from the DNS.

lookuphostname( <IP-address> )

Returns the hostname for an IP-address requested from the DNS.

Source: C:\AA\Src20020607\EnHlp\html\hscr744u.htm - (192)


Functions, hamster (scripts)

Hamster-Scripts: built-in Functions (Server)

Translated by Paul Batchie

HamVersion

Returns the version number of Hamster.

Return value: String with version-number (e.g. "1.3.22.103").

print( "Hamster Vr. " + HamVersion )

HamPath, HamHscPath, HamHsmPath, HamLogsPath, HamServerPath, HamGroupsPath, HamMailPath, HamNewsOutPath, HamRCPath and HamMailsOutPath

Returns Hamster's various internal paths - the main folder (the location of the .exe), the path for scripts, modules, logs, servers, newsgroups, mail, outgoing news, remote control and for outgoing mail.

Return value: String with full path-name and trailing backslash.

if( FileExists( HamMailsOutPath + "*.msg" ) )
   # send mails
endif

HamMessage( <message>, <parameter>)

HamMessage( <message> )

Initiates some Hamster-functions which are normally available and accessed by menu-items:

Named values for <Message> are predefined in module hamster.hsm:

HAM_MSG_HAMSTER_EXIT    = 1
HAM_MSG_RESET_COUNTERS  = 2
HAM_MSG_LOCALNNTP_ONOFF = 3
HAM_MSG_LOCALPOP3_ONOFF = 4
HAM_MSG_LOCALSMTP_ONOFF = 5
HAM_MSG_LOCALIMAP_ONOFF = 14
HAM_MSG_LOCALRECO_ONOFF = 11
HAM_MSG_SHOWWINDOW      = 6
HAM_MSG_SHOWICON        = 7
HAM_MSG_STOPALLTASKS    = 8
HAM_MSG_RELOADCONFIG    = 9
HAM_MSG_RELOADIPACCESS  = 10
HAM_MSG_DIRS            = 12
HAM_MSG_SCRIPTS         = 13
HAM_MSG_NEWSKILLFILELOG = 15
HAM_MSG_PULLNEWGROUPS   = 16

The allowed values and interpretation of the parameter <Parameter> depends on the type of <Message>.

Message Parameters     purpose

 1    delay-time       Exit Hamster, param is delay time in millisec before Hamster terminates
 2    0,1,2 or 3       Reset counters and log, 0=counters+Log 1=counters 2=Log 3=errorlog
 3  0=stop, 1=start    Start/Stop local NNTP-server
 3 2=restart, 3=status Restart/return current status local NNTP-server (1=active, 0=stopped)
 4  0=stop, 1=start    Start/Stop local POP3-server
 4 2=restart, 3=status Restart/return current status local POP3-server (1=active, 0=stopped)
 5  0=stop, 1=start    Start/Stop local SMTP-server
 5 2=restart, 3=status Restart/return current status local SMTP-server (1=active, 0=stopped)
14  0=stop, 1=start    Start/Stop local IMAP-server
14 2=restart, 3=status Restart/return current status local IMAP-server (1=active, 0=stopped)
11  0=stop, 1=start    Start/Stop local Remote Control-Server
11 2=restart, 3=status Restart/return current status local RECO-server (1=active, 0=stopped)
 6  0=hide, 1=show     Hide/show main-window
 7  0=hide, 1=show     Hide/show tray-icon
 8     ignored         Menu: Online/Stop all tasks
 9  0=test             Test if configuration-dialog is open
 9          1=load     Reload configuration (hamster.ini, Malias.hst)
10     ignored         Reload IPAccess.hst
12  0=Close 1=Open     Close/Open the "Edit Dir(s)" browser-dialog for the mail/news folders
12     2=Status        Return the status of the "Edit Dir(s)" browser-dialog (1=open, 0=closed)
13  0=Close 1=Open     Close/Open the "Edit Scripts/modules" dialog
13     2=Status        Return the status of the "Edit Scripts/modules" dialog (1=open, 0=closed)
15  0=Close 1=Open     Close/Open the "News-Killfile-Log" dialog
-                      (1 opens and waits until closed, 0 closes if open)
15     2=Status        Return the status of the "News-Killfile-Log" dialog (1=open, 0=closed)
16          1=Open     Open the "Add News-Pull" dialog

Note to Message = 9

The parameter '1' reloads the configuration only if all configuration windows are closed (return value of the function: 1/true). Otherwise nothing happens (return value: 0/false). With the parameter '0' (test) basically nothing is actually done, only tests are performed to determine the return-value. So this indicates whether the reload is possible, that is all configuration-dialogs are closed).

Note to Message=12-16

The parameter 2 allows to request if the respective dialog is open (return-value 1) or closed (return-value 0).

Return-value: (except in Message = 9)

0  OK; command executed.
1  Error; command failed.
2  Unknown parameter.
3  GPF, floating point error.

HamMessage( 2, 0 ) # reset counters

HamShutdown( <delay> )

HamShutdown

This function is identical to: HamMessage( 1, <x> ) and similar to Menu: File | Exit

Quits Hamster after waiting <delay> milliseconds.

HamStopAllTasks

This function is identical to: HamMessage( 8, <x> ) and also to Menu: Online | Stop all tasks

HamStopAllTasks stops all active threads.

HamResetCounters( <x> )

HamResetCounters

This function is identical to: HamMessage( 2, <x> ) and also to Menu: File | Clear counters/log

Resets counters and/or clears the logs.

With x:
0 = reset counters and clear logs
1 = only resets counters
2 = only clears logs
3 = only clears warning/error-log

The default-value for x is 0.

HamNNTPServer( <x> )

HamSMTPServer( <x> )

HamPOP3Server( <x> )

HamIMAPServer( <x> )

HamReCoServer( <x> )

HamNNTPServer( <x> ) is identical to: HamMessage( 3, <x> ) and Menu: Local | Start/Stop Newsserver(NNTP)

HamSMTPServer( <x> ) is identical to: HamMessage( 5, <x> ) and Menu: Local | Start/Stop Mailserver(SMTP)

HamPOP3Server( <x> ) is identical to: HamMessage( 4, <x> ) and Menu: Local | Start/Stop Mailserver(POP3)

HamIMAPServer( <x> ) is identical to: HamMessage( 14, <x> ) and Menu: Local | Start/Stop Mailserver(IMAP)

HamReCoServer( <x> ) is identical to: HamMessage( 11, <x> ) and Menu: Local | Start/Stop remote control

These functions control the local servers:

With x:
0 = stops server
1 = starts server
2 = re-starts server
3 = returns the current status of the server (1=active, 0=stopped).

HamMainWindow( <x> )

This function is identical to: HamMessage( 6, <x> )

HamMainWindow(0/1) closes/opens the Hamster main window.

With x:
0 = hide the main-window
1 = show the main-window

HamTrayIcon( <x> )

This function is identical to: HamMessage( 7, <x> )

HamTrayIcon(0/1) hides/shows the Hamster tray-icon.

With x:
0 = hide the tray-icon
1 = show the tray-icon

HamReloadConfig( <x> )

This function is identical to: HamMessage( 9, <x> ) and also to Menu: Configuration | Reload Configuration

HamReloadConfig(1) reloads all settings, if no configuration-dialog is open,

HamReloadConfig(0) reports if any configuration-dialog is open (1=yes, 0=no).

Return value: 1=yes, 0=no

HamReloadIPAccess

This function is identical to: HamMessage( 10, <x> )

HamReloadIPAccess reloads the file IPAccess.hst.

HamDialogEditDirs( <x> )

HamDialogScripts( <x> )

HamDialogNewsKillfileLog( <x> )

HamDialogAddPull( <x> )

HamDialogEditDirs( <x> ) is identical to: HamMessage( 12, <x> ) and Menu: Local | Open Dir{s} for News/Mail...

HamDialogScripts( <x> ) is identical to: HamMessage( 13, <x> ) and Menu: Script | Manage scripts and modules...

HamDialogNewsKillfileLog( <x> ) is identical to: HamMessage( 15, <x> ) and Menu: Configuration | Killfile-Log/-settings

HamDialogAddPull( <x> )is identical to: HamMessage( 16, <x> ) and Menu: Configuration | News: server, groups, pulls... | tab:News-Pulls | button:Add

HamDialogEditDirs(x) controls the dialog "Edit dirs".

HamDialogScripts(x) controls the dialog "Edit Scripts/Modules".

HamDialogNewsKillfileLog(x) controls the dialog for the news-killfile-log.

HamDialogAddPull(x) controls the dialog for new news-pulls.

With x:
1 = opens the dialog
0 = closes the dialog
2 = returns the current status of the dialog (1=open, 0=closed)

HamGetStatus( <status>, <parameter>)

Supplies information about the current status of Hamster.

HamGetStatus(1,n) reports whether local server is started

With n:
1=local NNTP-server
2=local POP3-server
3=local SMTP-server
4=local IMAP-server

Return value: 1 if the server is active, otherwise 0

HamGetStatus(2,n) reports the number of open connections to a local server.

With n:
1=local NNTP-server
2=local POP3-server
3=local SMTP-server
4=local IMAP-server

Return value: The number of open connections to the server.

HamGetStatus(3,n) gives information about arrived/waiting news and mails.

With n:
1=new articles available on server
2=loaded articles, not in the history and not filtered by scores.hst
3=known (History-filtered) articles, that is articles already in history
4=deleted articles, filtered by scores.hst
5=articles to send, (queued articles)
6=new E-mails,
7=E-mails to send, (queued E-mails)
8=Number of articles loaded by message-id. (getmids.txt)
9=Number of error-lines in the log
10=Number of warning-lines in the log

Return value: The number of mails/articles of the type specified by the parameter.

HamGetStatus(4,n) returns the currently set level of log-reporting.

With n:
1 : Loglevel View in logwindow
2 : Loglevel Save to logfile

Predefined values:

LOGID_ERROR     = $8000;
LOGID_WARN      = $4000;
LOGID_SYSTEM    = $0800;
LOGID_INFO      = $0080;
LOGID_DETAIL    = $0040;
LOGID_DEBUG     = $0008;
LOGID_STATUS    = $0004;
LOGID_FULL      = $0001;

Return value: Integer.

Warning(HamGetStatus (3,1))

HamMainFQDN

Returns the general FQDN set in Hamster.

HamMIDFQDN

Returns the FQDN for message-ID set in Hamster.-

HamEnvelopeFrom

Returns the Envelope From:-header set in Hamster.-

HamPostmaster

Returns the Postmaster-Account used by Hamster.

HamUsenetAcc

Redelivers the Newsmaster Account related by the hamster.

HamThreadCount

Returns the number of currently active tasks.

Note: Mail-/news-client connections to local servers and running scripts do not count as "active tasks" here.

Return value: Integer.

print( HamThreadCount )

HamIsIdle

Returns TRUE (1) if there are currently no active tasks like purging, pulling news, sending mails etc.

Note: Client-connections to local servers and running scripts do not count as "active tasks" here.

Return value: Integer.

if( HamIsIdle )
   # ...
endif

HamWaitIdle( <timeout> )

HamWaitIdle

The function HamWaitIdle waits up to the given amount of milliseconds until all active tasks are finished. If HAM_WAITIDLE_INFINITE, -1 or no <timeout> parameter is given, the function does not return until Hamster is idle again. Note: Client-connections to local servers and running scripts do not count as "active tasks" here.

Return value: 0=OK, 1=Timeout, 2 = Interrupted

HamWaitIdle

HamFlush

Writes unsaved data to disk (e.g. history). Suggested after last article imported with HamArtImport.

Return value: 0

HamFlush

HamPurge( <option>, <group> )

HamPurge( <option> )

HamPurge

Const HAM_PURGEOPT_DOALL      = 0xFF
Const HAM_PURGEOPT_DONEWS     = 0x01
Const HAM_PURGEOPT_DOHISTORY  = 0x02
Const HAM_PURGEOPT_DOKILLS    = 0x04
Const HAM_PURGEOPT_DOMHISTORY = 0x08
Const HAM_PURGEOPT_MAILINLOG  = 0x10
Const HAM_PURGEOPT_MAILOUTLOG = 0x20
Const HAM_PURGEOPT_NEWSOUTLOG = 0x40
Const HAM_PURGEOPT_RASDIALLOG = 0x80

types of data to purge
bit0=1 : articles
bit1=2 : history-entries
bit2=4 : killfile-log
bit3=8 : mailhistory-entries

Starts a purge thread (i.e. the deletion of old data). The parameter <option> describes which old data should be deleted (1=articles, 2=news-history, 4=killfile log, 8=mail history). This parameter is bit-oriented and is calculated by logical AND for the requested types of data. If it's omitted, all type of data are purged. With <group> one can limit the purge to a single group.

Return value: 0=OK/Started, <>0 = Not started

HamWaitIdle
HamPurge( 4 )
HamPurge (1,"hamster.en.misc")
HamWaitIdle

HamCheckPurge

Determines whether Hamster is currently in the process of purging old data.

Return value: 0 = no purge in process <>0 = Hamster is purging old data

HamRebuildGlobalLists

Starts a thread which rebuilds some lists needed by Hamster, especially the list of newsgroups used for selecting new news-pulls. The parameter is not used at the moment, but should be set to zero in preparation of possible future extensions.

Return value: 0 = OK/Started, <>0 = Not started

HamWaitIdle
HamRebuildGlobalLists
HamWaitIdle

HamRebuildHistory

Starts a thread which deletes the current news history (".\Groups\Hist*.dat") and rebuilds it by adding the Message-IDs of all articles stored in Hamster.

Note: This may take some time with thousands of articles, so it should only be used if it's really necessary!

This function should only should be used if the hamster is 'Idle'. (See function HamWaitIdle) Be sure to wait until Hamster is idle again (e.g. with ControlWaitIdle) after calling this function, and stop the local servers temporarily!

Return value: 0=OK/Started <>0 = Not started

HamWaitIdle
HamRebuildHistory
HamWaitIdle

HamSetLogin( <identifier>, <username>, <password> )

Temporarily sets <username> and <password> for the given <identifier>, which can be either the name of a RAS-connection or the name of a news-/mail-server. Note that the spelling and case (uppercase/lowercase) of the <identifier> must be entered correctly. "Temporarily" means that this setting is not saved to a file but is kept in memory until Hamster is closed again. If username and/or password is set to a single question-mark ("?"), Hamster will ask for the value. Furthermore, one of the stored "general purpose" passwords can be selected here to avoid noting it in clear text in the script.

Return value: 0 = OK <>0 = Error

HamSetLogin ( "MyProvider", "MyUsername", "MyPassword")
HamSetLogin ( "MyProvider", "MyUsername", "?"  )
HamSetLogin ( "MyProvider", "$42", "")

HamNewsPull( <server-list> )

HamNewsPull

Starts the threads which pull new articles from newsservers. If <server-list> is omitted or set to an empty string (""), all NNTP-servers defined in Hamster will be used. Otherwise, transfer is restricted to the given servers. If used, <server-list> has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the "Configuration / News:.../tab: Newsserver" (i.e. servername + "," + port), e.g.: "news.aaa.com,nntp;news.bbb.com,nntp".

Note: This function is obsolete and should no longer be used.

Starting with Hamster Vr. 1.3.19, this function was replaced with the NewsJobs* functions described below and is only simulated internally with these new functions. See the example at "HamNewsJobsStart" for a replacement of this obsolete function.

Return value: 0 = OK/Started <>0 = Not started

HamNewsPull
HamNewsPull( "one.newsserv.er,nntp;two.newsserv.er,nntp" )

HamNewsPost( <server-list> )

HamNewsPost

Starts the thread which posts new articles (if any). If <server-list> is omitted or set to an empty string (""), all NNTP-servers defined in Hamster may be used. Otherwise, transfer is restricted to the given servers. If used, <server-list> has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the "Configuration / News:.../tab: Newsserver" (i.e. servername + "," + port), e.g.: "news.aaa.com,nntp;news.bbb.com,nntp".

Note: This function is obsolete and should no longer be used.

Starting with Hamster Vr. 1.3.19, this function was replaced with the NewsJobs* functions described below and is only simulated internally with these new functions. See the example at "HamNewsJobsStart" for a replacement of this obsolete function.

Return value: 0 = OK/Started <>0 = Not started

HamNewsPost
HamNewsPost( "one.newsserv.er,nntp;two.newsserv.er,nntp" )

HamNewsJobsClear

Clears the list of news-related jobs.

Return value: 0

HamNewsJobsClear

HamNewsJobsCheckActive( <server-list> )

HamNewsJobsCheckActive

Adds a job to the NewsJobsqueue to update the newsgroup-list (new groups) for the active servers. This is useful if the automatic check for serverinfo in "Configuration / News:... / tab Settings" is disabled. With the parameter <server-list> this function can be used for a single server.

Return value: The number of jobs added to the newsjobsqueue. In case of an error the return value is 0.

HamNewsJobsPullDef( <server-list> )

HamNewsJobsPullDef

Fills the list of news-related jobs with the pull list of the given newsservers (i.e. one job for each group to pull from a server). If <server-list> is omitted or set to an empty string (""), all groups of all NNTP-servers defined in Hamster will be added. Otherwise, only the groups for the given servers will be added. If used, <server-list> has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the "Configuration / News:.../tab: Newsserver" (i.e. servername + "," + port), e.g.: "news.aaa.com,nntp;news.bbb.com,nntp".

Return value: < 0 : Error, >= 0 : Number of pull-jobs added

HamNewsJobsPullDef
HamNewsJobsPullDef( "one.newsserv.er,nntp;two.newsserv.er,nntp" )

HamNewsJobsPostDef( <server-list> )

HamNewsJobsPostDef

Fills the list of news-related jobs with post-jobs for the given newsservers (i.e. one job for each article waiting to be posted). If <server-list> is omitted or set to an empty string (""), all NNTP-servers defined in Hamster may be used to post the article. Otherwise, transfer is restricted to one of the given servers. If used, <server-list> has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the "Configuration / News:.../tab: Newsserver" (i.e. servername + "," + port), e.g.: "news.aaa.com,nntp;news.bbb.com,nntp".

Return value: < 0 : Error, >= 0 : Number of post-jobs added

HamNewsJobsPostDef
HamNewsJobsPostDef( "one.newsserv.er,nntp;two.newsserv.er,nntp" )

HamNewsJobsPull( <server>, <group-select> )

HamNewsJobsPull( <server> )

Fills the list of news-related jobs with the pull list of the given newsserver <server>. If <group-select> is given, only the groups matching this regular expression are added.

Return value: < 0 : Error, >= 0: Number of pull-jobs added

HamNewsJobsPull( "one.newsserv.er" )
HamNewsJobsPull( "two.newsserv.er", "^alt\." )

HamNewsJobsPost( <server>, <group-select>, <header-select> )

HamNewsJobsPost( <server>, <group-select> )

HamNewsJobsPost( <server> )

Fills the list of news-related jobs with post jobs for the given newsserver <server>. If <group-select> is given and not empty, only articles with a newsgroup matching this regular expression are added. If <header-select> (regexp) is given, only articles with a header-line matching this regular expression are added.

Note: Hamster does not support "multiple injection", so once an article is added to the list, it is ignored in further assignments.

Note: Hamster only posts to servers from which a group is also pulled, so regardless which selections you choose, the resulting server/group-combination has to be in Hamster's pull-list, too.

Return value: < 0 : Error, >= 0 : Number of post-jobs added

HamNewsJobsPost( "one.newsserv.er", ".*", "^X-Post-To: one.newsserv.er" )
HamNewsJobsPost( "two.newsserv.er", "^alt\." )
HamNewsJobsPost( "one.newsserv.er" )

HamNewsJobsFeed ( <server>, <group-select> )

HamNewsJobsFeed ( <server> )

Allows the exchange of articles which are possible with the server <server> and the group selection of indicated groups. If the group selection is empty, all available groups are applied, otherwise only those that match the Regular Expression in <group-select>.

WARNING: this function is only for article exchange between peer servers, and not for the common article exchange with providers. This command uses functionality of the IHAVE Command, described in RFC977.

Return value: < 0 : Error, >= 0 : number of the added news jobs

HamNewsJobsFeed( "one.newsserv.er,nntp" )
HamNewsJobsFeed( "two.newsserv.er,nntp", "^alt\." )

HamNewsJobsStart( <server-list> )

HamNewsJobsStart

Starts transfer-threads for the given servers that have pending news jobs. If <server-list> is omitted or set to an empty string (""), threads for all newsservers with pending news-jobs are started. Otherwise, only threads for the given servers are started. If used, <server-list> has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the "Configuration / News:.../tab: Newsserver" (i.e. servername + "," + port), e.g.: "news.aaa.com,nntp;news.bbb.com,nntp".

Return value: < 0 : Error, >= 0 : Number of threads started

Example:

HamNewsJobsStart( "one.newsserv.er,nntp" )

# Replacement for HamNewsPost and HamNewsPull:
HamNewsJobsClear
HamNewsJobsPostDef
HamNewsJobsPullDef
HamNewsJobsStart

HamNewsJobsGetCounter

Gets the number of existing entries in the order list.

Return value: integer

HamNewsJobsGetServer( <index> )

Gets the server name of an entry of the order list.

Return value: String

HamNewsJobsGetParam( <index> )

Gets the parameter of an entry in the order list. The parameter is dependent on the type of the entry.

Return value: String

HamNewsJobsGetType( <index> )

Gets the type of the entry of the order list.

Return value: Jobtype integer

Task-types:
JOBTYPE_INVALID  = 0
JOBTYPE_SRVINFOS = 1
JOBTYPE_NEWSPOST = 2
JOBTYPE_GETBYMID = 3
JOBTYPE_NEWSPULL = 4
JOBTYPE_NEWSFEED.= 5

HamNewsJobsGetPriority ( <index> )

Gets the priority of an entry in the order list.

Return value: Integer

Standard for the respective types is:

Typ= 1    JOBPRIO_SRVINFOS   = MaxInt - 1;
Typ= 2    JOBPRIO_NEWSPOST   = MaxInt - 2;
Typ= 3    JOBPRIO_GETBYMID   = MaxInt - 3;
Typ= 4    Priority corresponds to the number of the articles in the group

var($i)

warning("Warning: ",hamnewsjobsgetcounter," news jobs not implemented")
for ($i,0, HamNewsJobsGetCounter-1)
         warning(HamNewsJobsGetServer($i)+" "+_
                 HamNewsJobsGetParam($i)+" ",_
                 HamNewsJobsGetType($i)," ",_
                 HamNewsJobsGetPriority($i))
endfor

HamNewsJobsSetPriority( <index> , <new priority> )

Sets the priority for an entry in the order list.

Return value: Integer

Predefined values for <new priority>

$JOBPRIO_SRVINFOS = 2147483646
$JOBPRIO_NEWSPOST = 2147483645
$JOBPRIO_GETBYMID = 2147483644

Example:

warning("Warning: ",hamnewsjobsgetcounter," NewsJobs not implemented")
for ($i,0, HamNewsJobsGetCounter-1)
 warning("Index: "+Str($i)+_
         " Server: "+HamNewsJobsGetServer($i)+_
         " Parameter: "+HamNewsJobsGetParam($i)+_
         " Type: "+HamNewsJobsGetType($i)+_
         " Priority ."+HamNewsJobsGetPriority($i))
 HamNewsJobssetPriority($i,10*$i)
endfor
for ($i,0, HamNewsJobsGetCounter-1)
 warning("Index: "+Str($i)+_
         " Server: "+HamNewsJobsGetServer($i)+_
         " Parameter: "+HamNewsJobsGetParam($i)+_
         " Type: "+HamNewsJobsGetType($i)+_
         " Priority ."+HamNewsJobsGetPriority($i))
endfor

HamNewsJobsStart

HamNewsJobsAdd( <server > , <type> , <parameter>, <priority> )

Adds an entry to the order list. Servers and parameters must be character strings. Type and Priority should be numerical values.

Predefined values for <priority>

$JOBPRIO_SRVINFOS = 2147483646
$JOBPRIO_NEWSPOST = 2147483645
$JOBPRIO_GETBYMID = 2147483644
$JOBPRIO_NEWSFEED = 2147483643

Return value: Integer

HamNewsJobsAdd("news.wuff.de",4,"hamster.test",10000)

HamNewsJobsDelete( <index> )

Deletes a single job at the position <index> out of the order list.

Return value: 0

HamNewsJobsDelete(2)

HamAddGroup ( <groupname > )

Creates a new local group with the name <groupname >.

Return value: 0=OK/created, -1=not created

HamAddGroup("Test")

HamDelGroup ( <groupname > )

Deletes the local group with the name <groupname >.

Return value: 0=OK/deleted, -1=not deleted

HamDelGroup("Test")

HamAddPull ( <server> , <groupname > )

Adds a new newspull. If the group for this pull does not exist, than it will be automatically created.

Return value: 0=OK/pull added, -1=pull not added

HamAddPull ("news.xxx.de","Test")

HamDelPull ( <server> , <groupname > )

Deletes a newspull.

Return value: 0=OK/deleted, -1=not deleted

HamDelPull ("news.xxx.de","Test")

HamMailExchange( <server-list> )

HamMailExchange

Starts the thread which first fetches new mails from the mailservers and then sends out mails (if any). If <server-list> is omitted or set to an empty string (""), all POP3- and SMTP-servers defined in Hamster may be used. Otherwise, transfer is restricted to the given servers. If used, <server-list> has to consist of a semicolon-separated (";") list of servernames. The servernames have to be in the same format as displayed in the "Configuration / News:.../tab: Newsserver" (i.e. servername + "," + port), e.g.: "news.aaa.com,nntp;news.bbb.com,nntp".

NOTE: Previously it was suggested to use "HamFetchMail" and "HamSendMail" instead, as these commands also support the different mail-accounts and the mail-filters of Hamster, that "HamMailExchange" did not.

In case of "HamMailExchange" now indeed the settings of the POP3-server will be used, so in most cases this command suffices.

Return value: 0 = OK/Started <>0 = Not started

HamMailExchange
HamMailExchange( "one.mailserv.er,smtp;two.mailserv.er,pop3" )

HamFetchMail( <server>, <port>, <user>, <pass>, <destuser>, <filter>, <LeaveOnServer>, <SSLMode>, <SSLVerify>, <SSLCaFile> )

...

HamFetchMail( <server> )

Starts a thread which fetches mails from the given POP3-server (<server> on port <port>).

For username <user> and password <pass> an entry from the menu " Configuration / Accounts & Passwords... / tab: Passwords " can be used. For <destuser> a local account which is to receive the emails can be indicated, otherwise, the user configured in the menu Mail Servers is used. Additionally, a paragraph in the mail filter file "Mailfilt.hst" can be indicated as <filter>, otherwise again this defaults to the Mail Servers menu specification.

If <LeaveOnServer> = "1", the Mails are left on the server, if <LeaveOnServer> = "0", they are deleted; any other value defaults to the default menu setting.

The parameter <SSLMode> is an integer which represents if and how SSL/TLS will be used:

0 - SSL/TLS is switched off
1 - SSL on separate Port (sPOP3 or sSMTP)
2 - TLS, if possible
3 - TLS is required

The parameter <SSLVerify> is also an integer and determines the validation of external server certificates:

0 - Validation of certificate is switched off
1 - Validation of certificate if certificate available
2 - Always validate certificate
3 - Always validate certificate and compare servercertificate with local copy

With <SSLCaFile> (String) a file can be entered for the validation of certificates. This will overrule the default (Configuration SSL: "File with certificates for verification").

Note! The use of SSL in connection with Hamster requires additional tools.

These can be found at the hamster-archive

http://hamster.ist-super.de/

http://home.t-online.de/home/micha-wr/hamster/index.htm

Return value: 0=OK/Started, <>0 = Not started

HamFetchMail( "pop3.serv.er", "pop3", "", "", "", "" )
HamFetchMail( "pop3.serv.er", "", "john.doe", "secret", "john", "" )
HamFetchMail( "pop3.serv.er", "10110", "$7", "", "jane", "" )
HamFetchMail( "pop3.serv.er", "", "$42", "", "admin", "myfilters" )

HamSendMail( <server>, <port>, <from-select>, <to-select>, <SSLMode>, <SSLVerify>, <SSLCaFile> )

...

HamSendMail( <server> )

Starts a thread which sends mails to the given SMTP-server (<server>, <port>) with optionally specified parameters. If the parameter <from-select> and/or <to-select> is not empty, only those e-mail will be sent, with a "Envelope-From" resp "Rcpt-To" that matches the corresponding parameter (regular expression). If <from-select> and <to-select> are both empty or absent, all mails waiting for delivery are sent.

The parameter <SSLMode> is an integer which represents if and how SSL/TLS will be used:

0 - SSL/TLS is switched off
1 - SSL on separate Port (sPOP3 or sSMTP)
2 - TLS, if possible
3 - TLS is required

The parameter <SSLVerify> is also an integer and determines the validation of external server certificates:

0 - Validation of certificate is switched off
1 - Validation of certificate if certificate available
2 - Always validate certificate
3 - Always validate certificate and compare servercertificate with local copy

With <SSLCaFile> (String) a file can be entered for the validation of certificates. This will overrule the default (Configuration SSL: "File with certificates for verification").

Note! The use of SSL in connection with Hamster requires additional tools.

These can be found at the hamster-archive

http://hamster.ist-super.de/

http://home.t-online.de/home/micha-wr/hamster/index.htm

Return value: 0=OK/e-mail could be sent, <>0 = e-mail not sent

HamSendMail( "smtp1.serv.er", "smtp", "john\.doe@serv\.er" )
HamSendMail( "smtp2.serv.er")

HamSendMailAuth( <server>, <port>, <user>, <pass>, <from-select>, <to-select>, <SSLMode>, <SSLVerify>, <SSLCaFile> )

...

HamSendMailAuth( <server> )

The same command and parameters as "HamSendMail" above, but this functions additionally allows providing username <user> and password <pass> for authentication by the SMTP-Auth-procedure.

Note: Username and password are ignored if SMTP authentication is not enabled for the given server (see notes on SMTP authentication under "Mailserver").

Return value: 0=OK/e-mail could be sent, <>0 = e-mail not sent

HamSendMailAuth( "smtp3.serv.er", "smtp", "$42", "", "@smtp3\.serv\.er" )

HamNewMail( <EnvelopeFrom>, <EnvelopeTo>, <Mailtext> )

With this function a new email is constructed. As <EnvelopeFrom> the email address of the sender or the name of an Account can be indicated. <EnvelopeTo> must contain the email address or the Account name of the receiver. Multiple receivers can be specified, each separated by a semicolon ”;”. The variable <Mailtext> must contain the complete email, with Headers and Body corresponding to the RFC2881/RFC2882.

Attention! Before using this script command to send e-mail into the Internet be sure to first test your script local and very thoroughly.

Return value: 0 if the E-Mail was processed normally, otherwise 1.

Example:

varset( $cr, chr(13) + chr(10) )
var( $Header, $Body )

 $Header = "FROM: name@provider.de" + $cr + _
           "TO: name@provider.de" + $cr + _
           "Subject: HamNewMail" + $cr + $cr

 $Body   = "Hello," + $cr + $cr + _
           "This examplescript could/should further be yet be enhanced " + $cr+ _
           "with the Date: -Header."

HamNewMail("name@provider.de", "name@provider.de", $Header + $Body)

HamRasDial( <name>, <user>, <pass> )

...

HamRasDial( <name> )

Dials the RAS-connection named <name> and tries to authenticate to the server with username <user> and password <pass> (if given). If <user> and/or <pass> is omitted or set to empty strings (""), the settings of "HamSetLogin" (if any) or the values stored in Hamster are used to establish the connection. This function also supports one of the stored "general-purpose"-passwords to avoid noting it in clear-text in the script (<user>="$(number), <pass>=""). See also menu Password and the command RasDial

NOTE: If this function is used, "HamRasHangup" should be used to disconnect/terminate the connection when finished.

Return value: 0=OK/connected; >0=Error-code; -1=RAS-network not installed

$try = 1
while( HamRasDial( "MyProvider","$42" ) != 0 )
   if( $try >= 3 )
      error( "Dialing failed!" )
   endif
   inc( $try )
   sleep( 10000 )
endwhile

HamRasHangup

Terminate/disconnect an existing RAS-connection, previously opened with HamRasDial.

Return value: 0=OK/Connection closed; >0 = Error-code; -1=RAS-network not installed

HamGroupCount

Retrieves the number of newsgroups available from Hamster (including local groups).

Return value: >= 0: OK/number of groups; <0: Error

See example for HamGroupName

HamGroupName( <index> )

Retrieves the name of the given newsgroup.

Note! The <index> can be 0 to (HamGroupCount-1).

Return value: character string

var( $grpidx )
$grpidx = 0
while( $grpidx < HamGroupCount )
   print( HamGroupName( $grpidx ) )
   inc( $grpidx )
endwhile

HamGroupNameByHandle( <Handle> )

Retrieves the name of a previously opened newsgroup identified by the group-handle <handle>.

Return value: character string

HamGroupIndex( <grpname> )

Retrieves the index-number of the given groupname or -1 for an unknown group.

Return value: >= 0: OK/index-number; -1: unknown group

print( HamGroupIndex( "internal.misc" ) )

HamGroupOpen( <grpname> )

Opens the given group and returns a handle, which is needed to retrieve additional info with the functions below (the handle is there referenced as <grphdl>). If the function fails, the return-value is negative (>0).

Return value: >= 0: OK/group-handle; <0: Error

$grphdl = HamGroupOpen( "internal.misc" )

HamGroupClose( <grphdl> )

Closes a previously opened group.

Attention: In scripts newsgroups always must be closed explicitly.

Ending the script or e.g. close the Hamster-object does not release the group-handle automatically!

Return value: 0

HamGroupClose( $grphdl )

HamArtCount( <grphdl> )

Retrieves the number of available articles in the specified group.

Return value: >= 0: OK/amount of articles <0: Error

See example for HamArtText

HamArtNoMin( <grphdl> )

Retrieve the lowest available article-number for the specified group.

Return value: >= 0: OK/article number <0: Error

See example for HamArtText

HamArtNoMax( <grphdl> )

Retrieve the highest available article-number for the specified group.

Return value: >= 0: OK/article number <0: Error

See example for HamArtText

HamArtText( <grphdl>, <artno> )

Retrieves the articletext including headers for the given article-number. An empty string indicates that an article with the given number is no longer available.

Return value: character string (article-text or "")

var( $grpnam, $grphdl, $artmin, $artmax, $artno, $arttxt )

$grpnam = "internal.misc"
$grphdl = HamGroupOpen( $grpnam )

if( $grphdl >= 0 )
   print( "Group ", $grpnam, ": ", HamArtCount($grphdl), " articles" )
   $artmin = HamArtNoMin( $grphdl )
   $artmax = HamArtNoMax( $grphdl )

   $artno = $artmin
   while( $artno <= $artmax )
      $arttxt = HamArtText( $grphdl, $artno )
      if( $arttxt <> "" )
         print( "Article ", $artno, ": ", len($arttxt), " byte" )
      endif
      inc( $artno )
   endwhile

   HamGroupClose( $grphdl )
endif

HamArtTextExport( <grphdl>, <artno> )

Same as "HamArtText", but the text is additionally converted to export format (Mbox). The difference is that every article is preceded with an additional line in Mbox-format. If the return-string is empty the article could not be found.

Return value: character string (article-text or "")

$arttxt = HamArtTextExport( $grphdl, $artno )

HamArtImport( <article>, <goverride>, <ignorehist>, <marknoarch> )

...

HamArtImport( <article> )

Imports the given <article> into Hamster's database and returns TRUE if the article was imported, FALSE otherwise. <article> contains the article to import, including all headers, header/body-separator and the article-body. The lines have to be separated by CR+LF (0x0d, 0x0a). In the header-lines at least the Date-, the From- and the Subject-header must be available. The newsgroup-header in only required if the parameter <goverride> is empty. If <goverride> is empty (default), the article is stored in the groups determined by the "Newsgroups:"-header of the article. Otherwise it is stored in the group given by <goverride>. If no valid local groups are given, the article is stored in the appropriate container group (default: "internal.misc"). This group can be changed in " Configuration / General Settings / tab:Internal Groups ". If <ignorehist> is TRUE (<>0), no history-lookup is made for the Message-ID of the imported article, so it will be imported even if it's already known. Default is FALSE. Note, this might cause duplicate articles!. If <marknoarch> is TRUE (<>0), the imported article is marked with "NoArchive=1" in the "X-Hamster-Info:"-header. This flag might be used to mark the imported article as "temporary", so it can, for example, be ignored by appropriate archiving-software. Default is FALSE.

Return value: True/1: OK, False/0: Error

HamArtImport( $article_text, "internal.misc" )

HamArtDeleteMid( <message-id> )

Locates the article identified by the given <message-id> and deletes it in Hamster's database-files. If an article is crossposted to multiple groups this function must be called multiple times to remove the article from all groups in which it is available.

The function returns 0, if article could be located and deleted; a value other than 0 otherwise.

Return value: = 0: Deleted <>0: Message-ID not found/deletion failed

HamArtDeleteMid( "<12345.67890@abd.def.ghi>" )

HamArtLocateMid( <message-id>, <grpname>, <artno> )

HamArtLocateMid( <message-id>, <grpname> )

HamArtLocateMid( <message-id> )

Returns 0, if the given Message-ID is (still) available in the history-file. In this case, the variables <grpname> and <artno> will be set to point to this article. Otherwise the function returns a value other than 0 and <grpname> and <artno> remain unchanged.

Return value: = 0: OK/found <>0: Message-ID not found

if( HamArtLocateMid( "<12345.67890@abd.def.ghi>", $groupname, $artno ) )
   # ...
endif

HamArtDeleteNrInGroup( <ArtNr>, <GrpName> )

Deletes the article with article number <artno> in group <grpname>. The function returns 0, if article could be located and deleted; a value other than 0 otherwise. The History remains unchanged with this command.

Return value: = 0: OK/deleted, = -2: article number not found, not deleted and -1 if the function is disabled (because of for example: purging, archive-mode).

Note! Return value in beta 1.3.23.210 was different:

= 1: OK/deleted, = 0: article number not found, = -1: function disabled.

HamArtDeleteMidInGroup( <message-id>, <grpname> )

Locates the article identified by the given <message-id> in group <grpname> and deletes it in Hamster's database-files from group <grpname>.

The function returns 0, if article could be located and deleted; a value other than 0 otherwise.

Return value: = 0: Deleted <>0: Message-ID not found/deletion failed

HamArtDeleteMid( "<12345.67890@abd.def.ghi>" )

HamArtLocateMidInGroup( <message-id>, <grpname>, <artno> )

Returns in <artno> the article number in group <grpname> with the requested <message-id>.

Return value: = 0: OK/found, -1: message-ID not found

HamScoreList( <grpname> )

Retrieves a list containing all score-entries, which will be used when pulling news for the given groupname <grpname>.

Return value: character string

ListSetText( $ScoreList, HamScoreList( "group.name" ) )

HamScoreTest( <grpname>, <article>, <matchlog>, <scope> )

HamScoreTest( <grpname>, <article>, <matchlog> )

HamScoreTest( <grpname>, <article> )

Returns the score-value for the given article <article>. The test is done with the assumption, that the article was pulled from the given newsgroup <grpname>. A CR/LF-separated list of all matching score-lines is returned in the variable <matchlog>. The variable <scope> determines the type of score-value which will be returned:

0 = the sum of overview-score-value and after-load-score-value (default)
1 = overview-score-value (X-Over)
2 = after-load-score-value

Return value: Integer (Score-value).

$ScoreValue = HamScoreTest( "group.name", $Article, $MatchLog )

Source: C:\AA\Src20020607\EnHlp\html\hscr8kry.htm - (193)


Procedures and Functions

Hamsterscripts: Procedures and Functions

Translated by Obbe-Jan Bakker

Adapted from original German explanation by Lars P. Wolschner

If certain processes in a Skript are required repeatedly, one summarizes the required statement sequences in Procedures or Functions under a preferable descriptive name. This prevents the inefficient repetition of similar blocks of code and permits to others the structured use of more complicated scripts/structures.

Procedures

A Procedure-definition summarizes a statement sequence under the name of a Procedure-identifier. The script-interpreter always executes the statement sequence in the Procedure-body when it finds the procedure-identifier as Statement in the script-source (procedure-call). After calling the procedure the interpreter continues with the next line after the procedure-call.

Procedure-definitions must always be placed at the end of a script. The order of the procedures in a script has no significance. A procedure starts with the keyword Sub and ends with the keyword endsub:

Sub <identifier> # Procedure-header
  # Procedure-body with statements
endsub

A procedure as described above can be called in the sourcecode by its name <identifier> or by the obsolete command gosub( <identifier> ). The interpreter executes on every call all statements in the procedure-body, until it encounters an endsub or a return-statement. The procedure-body can contain any number of return-statements.

Procedures can not be nested. A procedure can not contain other procedure-definitions in its procedure-body. A procedure can call other procedures and even itself (Recursion) with the statements in the procedure-body.

The procedure-identifier can be chose freely according to the following rules. The name must start with a letter and must be made out of letters, numbers and the underscore _. The name is always case-insensitive (uppercase/lowercase names are identical). The name may not start with the dollar-sign $ (this is reserved for Variable-identifiers) and script-keywords are not allowed as procedure-names.

Global and local variables

Variables can be defined local in a procedure-body. Variables defined outside of Procedures at the script-level are always defined as global.

Scope. Local Variables are available (exist) for as long as the procedure in which the local variable is defined is being executed. As soon as the procedure ends, the local variables do not exist any longer and their values are lost.

Global Variables retain their value for as long as the script runs in which the variable is declared.

Scope. Local variables can only be used within the procedure in which the variables are declared. In the rest of the script and in other procedures these variables are unknown, undeclared, invisible. Hence a called Procedure can not see the variables of the calling Procedure.

Global Variables can be used (is visible) in the whole script and in every procedure in it. A global variable can be hidden, made unreachable inside a procedure by a local variable with the same name. In this case this global variable can not be accessed in the procedure after the local variable has been declared, but the global variable does still exist and retains its current value. It 'resurfaces' as soon as the procedure ends.

Example:

  #!hs2

      var( $x {1}, $y ) # global Variables

      # global scope:
      #  Here the variables $x and $y are available.

   Sub TestScope # start of procedure TestScope

     var( $a, $b, $x {2} ) # local variables

        # local scope:
        #  Here are $a, $b and the with {2} declared $x and the
        #   global declared $y all visible (within scope).
        #  The with {1} global declared variable $x is hidden and can not be accessed!

   endsub # end of procedure TestScope

In the body of procedure TestScope the with {1} declared global variable $x can not be accessed, only the with {2} declared $x is visible (within scope). Outside this procedure the global variable $x is visible (within scope).

Functions

Functions are Procedures, which return a Result-value. So functions can not only be used like a procedure with their name as Statement , but the function-name can also be used as Operand in an Expression. The statements in a functions-body are executed before the value of the functions-result like every other operand in an expression is further used in the calculation of the expression.

In the functions-body there must for this in the processing of the statement queue a return()-statement with the return-value be reached. The return()-statement ends the execution of the function and returns the value of the Expression enclosed in the braces as result.

The functions-body can contain any number of return()-statements.

In the script

  #!hs2

  var( $a, $b, $x )

  $a = 1
  $b = 2
  $x = Sum # before the assignment the sub Sum is executed,
           # and then the result is assigned to $x.

  quit

  Sub Sum # Function Sum
    return( $a + $b )
  endsub

the Function Sum returns when called the sum of both the global variables $a and $b with return( $a + $b ).

Parameter

A Procedure or Function follows almost always the same order of execution of the statements in the body, but by using parameters every call can use different data in the processing.

In the example in the previous section the function Sum uses the data of the global Variablen $a and $b. If more than one result must be calculated, every calculated value can be assigned to further global defined variables. Parameterisation in Such a parameterisation by Side-effects is only recommended for small scripts and leads especially with the calculation of expressions with several function-calls fast to a loss of overview. The general advice is to use this kind of "implicit parameters" only for such values, that in several functions (somewhat similar to a Moduls) are considered similarly and do not change with every call, or are seldom changed.

It is better to define the data to be processed in the call itself and present these as arguments. For this the procedure or function must have its definition extended with a Parameterlist which defines the number and type of these parameters. For example defines

  Sub Division( $x, $y, *$r ) # Functions-header with parameter-list
    $r = $x % $y
    return( $x / $y )
  endsub

a Function Division, which divides the parameter $x as whole number by the parameter $y. The parameters are handled in the function-body as local declared variables and can there be used like any other locally declared Variables. The parameter $r has a star * as prefix, so the funtion will return the new value in $r when the function ends. The call

$div = Division( 10, 5, $divRest )

results in the assignment of the functionsresult 2 to the variable $div and the assignment of the division-rest 0 to the variable $divRest. The assignment to $divRest only occurs at the end of the function.

Instead of the literals 10 and 5 can every expression be used as Argument; the script-interpreter calculates all arguments and copies their value into the as value-parameters declared local variables (in example $x and $y), before starting with the execution of the procedure or function itself.

The third, with the prefix of a star as return-parameter declared parameter must mandatory be defined as a variable, because a value can not be assigned to an expression. In all other aspects the return-parameter acts just like a value-parameter. This allows the data to flow in both ways, in contrary to a value-parameter which offers only a one-way direction (value to the function, not result of the function).

Selfdefined procedures and functions must always be used/called with the same number of values and/or variables and in the same order, as defined in the parameterlist of the function/procedure-definition itself. Merely some built-in procedures and functions allow to omit all or some of the parameters. These will than be replaced by built-in defaults in the processing of the procedure/function. Further information for these can be found in the documentation for these procedures/functions.

Source: C:\AA\Src20020607\EnHlp\html\hscr8lk3.htm - (194)


Preprocessor-commands

Hamster-Scripts: Preprocessor-Commands

Translated by Paul Batchie

Preprocessor Commands are special commands that are execute before the script is started. If used, they should preferably be located at the very beginning of the script.

#!hs2

This command is ignored and might be removed in a future script-version, but if a Hamster-Script is executed by Hamster, it has to be the first line of each script, with no leading spaces before it. It is the marker which invokes the new script-engine and not the old (unsupported) one.

#!trace 1

For testing and debugging purposes, all lines will be displayed in the Hamster log as they are executed. Although there is also a "trace" command to enable and disable tracing, this preprocessor command is the only way to trace the preprocessor phase itself. It shows, for example, the initialization sequences of loaded modules.

#!debug <level>

Sets the debug-level, with which the script is executed. Default is "#!debug 0", which means, that all "debug" commands within the scripts will be ignored. The maximum debug level 255 indicates display all "debug" - commands.

#!load <module>.hsm

This command loads and initializes the given module and its dependents (if any), and allows the use of the functions defined there.

See Modules for details.

#!initialize

This command is used only in modules and marks its initialization code.

See Modules for details.

#!finalize

This command is used only in modules and marks its finalization code.

See Modules for details.

Source: C:\AA\Src20020607\EnHlp\html\hscr8vxf.htm - (195)


Syntax-overview (Scripts)

Hamsterscripts: call by Command Line

Translated by Obbe-Jan Bakker

Hamsterscripts can also be started from the commandline and can so be started by Windows shortcuts. The command-syntax for start by commandline or use in shortcuts is as follows:

hamster.exe [/w] [/svc] [/rw] [/ro] [[<path>!]<Scriptname> [<Parameter1>] ... ]

The Parameter

/w makes the calling process (a batch- or VB-script) wait until the Hamster is finished and closed again. Otherwise the calling process resumes immediately with its normal program flow without waiting for the end of the called process.

/svc prevents that the Hamster which is set up as a Windows NT- or Windows 2000-service will be closed if the Windows-user logs off. For the setup as service you will need a separate program such as Microsofts "srvany" or "HamSvc" by Jürgen Haible; See also: http://home.t-online.de/home/juergen.haible/hamsvc.htm.

/ro makes it possible to use Hamster on a read-only medium like a CD-ROM (archive).

/rw suppresses the write-protect function of parameter /ro on start of Hamster.

If neither /ro nor /rw is used, Hamster will 'guess' which to use. If the files in the main-directory are all read-only it will assume read-only mode. In the read-only mode all writing functions (including hs2 and OLE functions) won't work and needed ini-settings will be saved in <windir>\hamster.ini. Also in read-only mode many menu-items and settings are disabled cq hidden.

/regserver registers the OLE/COM/DCOM Server of Hamster with the operating system. This requires sufficient accessrights, i.e. admin-rights, otherwise the registration will fail.

/unregserver unregisters the OLE/COM/DCOM Server of Hamster with the operating system and removes the appropriate entries from the registry. This also requires sufficient accessrights, i.e. admin-rights.

<Scriptname> starts the script with this name from the script-folder of Hamster. Optionally extra parameters <Parameter1>... for this script can be added after the scriptname. In path-names the backslash \ may be replaced with the exclamation mark !.

Source: C:\AA\Src20020607\EnHlp\html\hscr9aul.htm - (196)


Boolean expressions

Hamsterscript: Boolean Expressions

Translated by Obbe-Jan Bakker

Adapted from original German explanations by Lars P. Wolschner

Branches and Loops allow the conditional (repeated) execution of one or several Statements. The condition to be checked is almost always to be given as a Boolean expression. Because a condition can be either fulfilled or not fulfilled, such an expression has only two possible results; in case of the Hamster the integer values 1 (condition fulfilled, true) or 0 (condition not fulfilled, false). Within such an expression every value unequal to 0 is treated as the value true.

For example, the comparison expression $a < $b has the value 1, if the variable $a has a smaller value than $b contains, if on the contrary the value is larger than $b contains then the result will be 0.

Boolean Operators

In a single Boolean expression also several conditions can be checked. The results of the separate tests are combined by Boolean operators (logical operators) to a total endresult. The syntax is similar to that of the arithmetic expressions. So is the condition

( $a = $b ) && ( $c = $d )

only then fulfilled, if the value from $a corresponds with the value from $b and the value from $c corresponds with the value from $d. On the contrary is the condition

( $a = $b ) || ( $c = $d )

already fulfilled when the value from $a corresponds with the value from $b or the value from $c corresponds with the value from $d. The condition

!( $a = $b )

Is fulfilled only if the value from $a does not correspond with the value from $b. So the value of the comparative expression ($a = $b) is negated.

&&, || and ! belong to the logical operators, = is in this context one of several comparison operators. An overview of all available operators can be found in the section operators.

The evaluation order of Boolean expressions parts can be given by use of parenthesis like in arithmetic expressions. The Interpreter of the Hamster calculates Boolean expressions always entirely (no lazy Evaluation). In the expression

( $a = $b ) && Test( $c )

the function Test( $c ) will be called in every case, even if the result of the whole expression should be already determined after evaluation of the partial expression $a = $b: If $a and $b contain different values, the value of the whole expression will be 0, independent of the result of the Test()-function.

Source: C:\AA\Src20020607\EnHlp\html\hscr9oa4.htm - (197)


Variables, Constants and Datatypes

Hamsterscript: Variables, Constants and datatypes

Translated by Obbe-Jan Bakker

Adapted from original German explanations by Lars P. Wolschner

The processing of scripts serves the processing of data. These are stored during the execution of the scripts in variables and are represented by their values. Each value characterized a certain Datatype, which determines the operations allowable on all values of this Type. The interpreter uses the datatype also to determine type and size of the memory to be reserved for the value.

Variables

Variables are not limited to a certain datatype during their lifespan (variants). They always have the type of the value stored within them. during its service life firmly at a certain Datatype bound and have always the type of the value stored just in them. Variables must be declared. The line

var( $MyVar, $MyVar2 )

declares for example both variables $MyVar and $MyVar2. The line

varset( $MyVar3, <expression> )

declares a variable $MyVar3 and assigns to it the value of the expression <expression> (Definition), whose value returns the varset()-function also.

varset( $MyVar3, $MyVar4, $MyVar5, <expression> )

declares the three variables $MyVar3 until $MyVar5 and assign to these the valur of the expression <expression>.

The equivalence sign causes an assignment. The line

$MyVar = <expression>

assigns to the variable $MyVar the value of the expression <expression>. An expression is a construction that returns a value. The variable has then the type of this value. Variables declared in a script are defined (valid variables) as long as the script runs. Variables declared within the body of a procedure are defined (valid variables) as long the Procedure runs.

Each Variable-Identifier begins with a single dollar sign $, followed by upper-case or lower-case letters, digits or the underscore _. The dollar sign must be followed by a letter ("A"..."Z", "a"..."z"). The length of a variable-name is not limited. All characters are significant, but upper- and lowercase characters are treated the same, so $ABC is exactly the same variable as $abc. Examples for valid names are:

  $a
  $i________
  $a_b
  $The_answer_is_REALLY_42

Examples for invalid names:

a$
^^ "$" on the wrong side of the name.

$____i____
 ^ Not a letter as the first character.

$a.b
  ^ Period is not allowed in name.

$The_answer_is_REALLY_42!!!
                        ^^^ Exclamation signs are not allowed in the name.

$1st_cut
 ^ No letter as the first character.

A variable is unique within its context (scope). The scope of variables can be set with the functions entercontext and leavecontext. The function entercontext opens a new context and the function leavecontext closes this again. Variables defined between the entercontext and leavecontext are local variables and do no longer exist after the leavecontext.

Example:

#!hs2
var($a)
$a=42
entercontext("test")
var($a)
$a=999
print($a)
leavecontext
print($a)
quit

Constants

Constants are limited to one defined datatype during their lifespan. They must be declared. The line

const( $MyConst, <expression> )

declares for example the constant $MyConst and assigns the value of the <expression> to it. The line

ConstEnum( $MyConst1, $MyConst1, $MyConst99 )

declares Statusconstants and assigns these an increasing value starting with value 0.

Elementary datatypes

The Hamster knows two elementary datatypes, signed integer numbers and characterstrings (Strings). The functions isint() and/or isstr() test, whether the parameter Expression consists of a number or a string. In this case the (boolean) result is 1, otherwise 0.

Strings can have an unlimited length, only limited by available memory (RAM) and/or windows swapfile (cq harddisk space). Strings can contain every character of the ASCII-characterset, the character Null (ASCII 0) does not terminate a string.

When string are compared for example for sorting, this is done by comparing the ordinal value of the characters. (See function ord()). The windows locales for country etc. are not used by Hamster. The chr()-Function returns the corresponding ASCII-character for a given ordinal-value.

Stringliterals must be enclosed in double quotation marks ("..."): "Hello!".

The quotation mark itself can occur in a string but must be doubled: "Hallo ""August"", how are you today?" would therefore become "Hallo "August", how are you today?"

Control characters (ASCII 0-31) should only be given as chr(...), as at least some of them would not survive the editor and loading/saving the script. "before control char" + chr(30) + "after control char"

The Stringliteral "" is the empty string.

Numeric datatypes can represent values between -2.147.483.648 and 2.147.483.647 (signed 32-bit).

Numeric literals must be specified in decimal without periods as thousand-separators or must be entered in hexadecimal. Hexadecimal literals are to be preceded by 0x (figure zero, followed by the lower-case letter x) : 0xFF for example for the numeric values 255. Decimal literals may be optional preceded by a positive/negative sign, + oder -.

Boolean values are represented by integer numbers. These are the result of expressions or functions, which test for a condition (Boolean expressions), like for example isint() oder isstr(). The function true returns the value 1, that represents the fulfillment of a condition; false represents the values 0 for non-fulfillment. Every value different from 0 is regarded to be true, that is a fulfilled condition.

Structured Datatypes like Arrays, Records, Hashes and Collections.

These datatypes are not available in Hamster-script, but can usually be replaced or at least simulated by using list-functions Lists

Where applicable, the data-types are converted automatically when needed, so if an integer is used in a string-context, it is converted to a string and vice versa.

Type conversion. In expressions, values of different data types are automatically converted when needed. First of all the Interpreter tries to calculate an expression as of type numeric. String-operands are converted to numbers before further calculation proceeds: If this conversion fails – not every string can be converted to number –, then also the end result will be a String.

In Boolean expressions, every value different from 0 will be interpreted as a fulfilled condition.

For reasons of efficiency and clarity it is recommended to use explicit type-conversions.

The int()-function converts a String into a number, str() and hex() convert a number to a string.

Dynamic datatypes

Pointers. Dynamic data defined with dynamic datatypes can not directly be used by pointers. The pointers are direct references to allocated memory. To accomplish this there are some special functions. These pointers must be declared and initialized before they can be used.

Source: C:\AA\Src20020607\EnHlp\html\hscr9otd.htm - (198)