
 0.29: 30.7.1995 - Special Summer Bumper Issue!
   - Added another overflow check to the parsing of PC16 (add node) protocol
   message. PacketCluster sends crap from time to time, this caused run-time
   error 201 at 0567:4FEE.... also found out that my byte-sized variable for
   storing user counts on PacketCluster nodes was too small - some REAL
   busy servers overseas seem to handle more than 255 users at a moment.
   This used to cause another overflow error 201, moved the upper limit to
   65535. Should be enough, huh.
   - User and node tables are now stored in a linked list. This means that
   memory for them is allocated dynamically, and your free base memory is
   the only limit for the amount of users and nodes...
   - Also moved a lot of user & socket information from static to dynamic
   memory.
   - User and node lists are sorted alphabetically. Looks nice. Happy, Mar? 8-)
   - Tracing of sockets to files. At first, only for PC links, but in the
   future, for any (user/link) socket, to a file or the screen...
   See links.ini for details on tracing links.
   - As always, some minor cosmic changes.
   - Two new cluster commands: Shout (announce full) and SAy (Ann local).
   - A new file: text\login.txt is sent to users on login, right after the
   qth/information string in clusse.ini. You can omit this file if you
   don't need it...
   - Another new file: data\last.clu is used to store last users list
   and some other actions (shutdowns, crashes) and can be viewed using
   the command lc (List Connections). There's also a new command to view the
   error log, le (List Errors).
   - A new prompt (nr. 6) with time and date.
   - Added a bunch of XMS handling functions in the code. Not really used yet,
   but some day they might get useful.
   - NOW you can REALLY /invite local cluster users to the conference mode.
   I wonder how it took so long to fix it. Now it works, anyway. I tried.
   - Added a feature in the users command: you can also give the callsign
   of a specific node to get the user list of that particular node.
   - PacketCluster version compatibility: Clusse has been succesfully linked
   (at least) with PacketCluster versions 5.3-05, 5.4-32 and 5.4-77. I have
   seen reports that Clusse won't talk properly with versions before 5.0,
   and i suspect the problem is in the differences of the linking protocol.
   I don't have such an old version running nearby so i cannot debug the
   differences out, sorry folks...
   - A new News system. The format of news.txt has changed, take a look at it.
   Involves a new command 'news'.
   - You can now connect console to node, by pressing CTRL-F2. You'll have
   the console call, if you have the ENABLE_LINKED setting in BPQCFG set to
   A or Y. Otherwice you'll have the BBS call. I suggest setting it to A,
   as Y could be considered dangerous. Press ctrl-f2 again to hard disconnect.
   - Fixed BPQ stream handling. Now can use any stream set, used to not work
   if the first stream used was not stream 1.

 0.29a: 13.8.1995
   - BPQ application number mystery solved and fixed. The bpq register for
   application mask is bit significant. Because of this you were only able
   to use use numbers 1-3 (if you knew how), now they all work like they
   should... The application number you enter in clusse.ini is converted
   to a bitmask. Thanks to Dustin Moore <moore@teleport.com>.
   - New cluster command WHo shows the users of the conference mode.
   Accepts all the same parameters as the convers /who command itself.
   - Expiry added for the file last.clu. Update your expiry.ini.
   - PC link status changes are logged to last.clu.
   - Message ID table enabled. Also stored in the file data\mid.clu, which
   is updated after every change.
   - New file data\status.clu. Used for storing pointers to mid.clu etc.
   - The wx command doesn't accept area parameter any more. It defaults
   to full distribution, like it's PacketCluster equivalent.
   - Log files are now written in directory log\, which is created
   automatically.
   - Fixed conference /invite a bit. Now can invite people with SSID's.
   - Added local users high water mark to % %.
   - Started modifying band monitoring for unproto user interface. Now
   Clusse traces all ports even if band monitoring is not enabled.
   - Changed the behaviour of command history keys.
   - Fixed alphabetical sorting: oh7lzb is now placed before oh7lzb-1.
   Shorter string is placed before the longer one, if there are no
   differences in the beginning.
   - Users which are in the conference mode are now shown in lower case
   in the Users list.

 0.29b: 15.8.1995
   - Two new commands to replace the terrible Flags command: Messages
   and BEeps. Used like the LOgin command. Flags is still there.
   - Fixed LErrors to read error.log from the log\ directory.
   - When linking to a PacketCluster, Clusse asks for last 5 DX spots
   and last 2 WWV messages. If they're not in the MID table, they're
   taken in.
   - Fixed a bug in BPQ frame send routine. Every time a packet got as
   long as the maximum frame length, the last character of the packet
   got garbled. What a funny effect!

 0.29c: 30.8.1995
   - Fixed an error in monitoring: if no monitoring window was present,
   the header lines of net/rom nodes broadcasts were still written on the
   screen, on the input line.
   - Added three new commands sh/, show/ and set/. They display a short
   message "This is not a PacketCluster (TM). Try the Help command."
   New users, which have used PacketCluster before, tend to try sh/dx,
   sh/ann as soon as they get in, and all sh/ commands were interpreted
   as the shout command...
   - Length of login.txt limited to 10 lines. Just for your inconvenience 8-)
   - Fixed ping: cannot ping local node any more. Pinging it caused the
   ping packet to hop on the console screen.
   - Clusse home page on WWW is http://zone.pspt.fi/clusse/ - check it out.
   - Removed channel 0 from the conference mode. Those of you familiar
   with the internet conversd network know why.
   - Added a new message type: Link status changes. Tells users when
   cluster links are added/dropped. Selectable in Messages and BEeps.
   - Removed messages and beeps setting from the Flags command.
   - Replaced the regular BIOS ctrl-g beep with my own. Ugh.
   - Fixed the list command... "list" was interpreted as linfo... whoops!
   - Clusse now checks if the text directory is present on startup...
   - More information in the % (list BPQ sockets) command. Preparing for
   smarter transmit buffering before BPQ to avoid "out of buffers" crashes...
   - Did some work with the unproto feature. Now sends WWV as well. Unproto
   messages are padded with spaces to columns, looks nicer on a terminal.
   Users can follow the unproto spots by setting their TNC/terminal program
   to only monitor UI packets addressed from your cluster callsign to DX.
   Format of the packets is specified in readme.txt. Unproto list
   requests and dx/ann/wwv spot uploading coming soon! Who wants to write a
   good terminal program with Clusse support?
   - New users don't get all the news when they log in for the first time.
   - Fixed a WEIRD bug in user command parsing, which caused it to give
   false results if the command string was 32 characters long. Example:
   "t oh7lzb Trying out the parser." (+CR) gave a message of
   "OH7LZB talks: oh7lzb Trying out the parser".
   - Adjusted the behaviour of the console command history again. When you
   copy a command from the command history, it's added to the end of the list.
   - Speedup in the expiry: should be quite a bit faster. Added some
   buffered reading and writing.
   - The DXBase log software seems to give the callsign of the DX before the
   frequency, "dx oh7lzb 144675". Modified Clusse to accept it.
   - Some cosmic changes in the startup screen.
   - Fixed talk (again!!) to correctly answer talks to non-existent local
   users. And some other small fixed bits. I wonder if i ever will get this
   working the way it should.
   - A new file data\nodes.clu stores the rtt's and hop counts for all
   heard cluster nodes.
   - A new file netusers.clu will store the home node of all users on the
   cluster network to be used when talking to a user not on the user list.
   The information can be found at least on Talk, DX, Announce and WWV
   messages. The feature was not completed, so i left it disabled.
   - Added expiry for the two new files. Update your expiry.ini.
   - Added timestamps to action and band monitoring.
   - Added talk mode. See the help file.
   - Clusse used to accept add user (PC16) messages from unknown nodes,
   this caused a memory leak and messy user add messages. Fixed.

 0.29d: 19.9.1995
   - Changed the talk mode exit character from ctrl-c to ctrl-z. Left it
   to ctlr-c by accident!
   - The console now accepts all the CTRL key combinations as input from
   the keyboard. CTRL-Z, CTRL-C, CTRL-G... etc...
   - Changed the shutdown key combination from CTRL-X to ALT-X. F10 does
   it, too. Changed the action monitoring toggle switch from F6 to CTRL-F5
   and cut links from F10 to CTRL-F9. See the help text on F1.
   - Split the expiry procedure to smaller parts. Clusse now processes
   the files one by one, serving the users between every file. Expiring
   all the files at a time looked like a total lockup of the software
   to the users. Now it looks like 7 shorter lockups 8-) ALT-F8 triggers
   expiry. If expiry is already running and waiting for the next section,
   ALT-F8 skips directly to the next one.
   - A new command: AWay. It's the opposite for HERe, which doesn't have
   any parameters any more. AWay accepts a parameter string, which can
   then be seen using the User command, like "user oh7lzb". It's also sent
   as a response to talk messages to the user. Can be used to tell when
   the user is coming back, where did he go etc...
   - Modified user socket send buffer flushing a bit. They're now flushed
   (sent to the user, even if not as long as paclen) once per second, and
   never on completion of command or after some other message. Saves a
   (small) bit of bandwidth again... allows several messages to be combined
   in one frame.
   - When a PC link gets disconnected, Clusse tries to relink in one minute.
   When linking fails, Clusse waits for the time specified in links.ini.
   CTRL and ALT-F9 link drop commands set the link tries count to 1 to
   prevent linking again in one minute.
   - Reorganized the talk system (again!). Now correctly forwards messages
   to non-local users, when the sender has forced the message to be sent to
   the local node (the T call@node trick, t call > node on PacketCluster,
   i'd call them hand-routed talks). Talks to clx systems (the Linux cluster
   software) should now work, too. The current version of clx doesn't accept
   PacketCluster's talk mode messages and hand-routed talks (a small bug in
   clx code).
   - Internet FTP to Zone didn't work for some time. Someone broke into Zone
   and we disabled all connections from untrusted hosts... ftp access is now
   available.
   - The ftp.funet.fi /pub/ham/packet/cluster/clusse/ directory is now a
   mirror of the pub/oh7lzb/clu/ directory on zone.pspt.fi, updated every
   night. This means that the latest version is always available on
   ftp.funet.fi.
   - WHEN INSTALLING/UPDATING CLUSSE, PLEASE use the pkunzip -d parameter
   when uncompressing the .ZIP file. The archive file includes the necessary
   directory structure, -d parameter tells pkunzip to create it on the
   destination disk! There's a suggested installation/updating procedure
   in readme.txt now.
   - New command: UPtime.
   - Changed the % command's name to STatus. More logical, and KAM TNC's
   have the streamswitch key set to % by default.
   - The SU (SuperUser) command works now. See the password.ini file for
   details. Used to gain access to the sysop functions of Clusse. For now,
   only the user specified as sysop in clusse.ini can use the SU command.
   After i get the edit user command working, a sysop can give others the
   sysop flag so that they can use the SU command...
   - New sysop commands:
        DIsconnect (stream/callsign) - disconnects a stream.
        Reboot - Exits clusse with errorlevel 100. See clu.bat!
        SHUtdown - Exits clusse with errorlevel 0.
   - An example clu.bat for starting up clusse and restarting it on exit,
   if necessary. Uses errorlevel checking.
   - Fixed the expiry system quite a bit.
   - Added some protection for weird node add and drop messages PC19 and
   PC21. PC21 for the local node call (from a link loop) made Clusse drop
   itself from the node list and go crazy. New node callsigns are checked
   for validity (length > 3 chars, includes both characters and digits).
   - Added timestamps in the link tracing file.
   - Started working on clusse.doc - the gonna-be official Clusse manual.

 0.29e: 26.9.1995
   - Added some validity checks for DX spots, announcements and user
   login/logout messages to catch garbled PC messages. PacketCluster
   forwards them all without checking the format...
   - Optimized links.ini reading & parsing a bit. Saved some code size.
   Should also stand some syntax errors better.
   - Fixed the SU command. Didn't work on the 0.29d release, though i had
   it working before releasing it... whoops! 8-) Also modified the
   checking system a bit after some discussion with my math teacher, see
   password.ini for details!
   - PacketCluster seems to be able to send and receive several PC
   messages in one frame. Modified Clusse to accept that and make use
   of the feature (by sending several PC messages in one frame, if possible).
   - Some other small fixes in the BPQ receive frame function.
   - New command NList lists the calls in the node file. The Nodes
   command also gets info about a specific node from the file if the node
   is not in the node table (try "node (nodecall)").
   - You can now (optionally) configure how many DX & WWV spots will Clusse
   poll from the neighbour cluster node when linking. Command M in links.ini.
   Defaults to 5 & 2, more documentation in links.ini.
   - Fixed clusse.ini parsing: the information string can now be empty.
   - New color settings in clusse.ini. Perhaps looks a bit better than
   before. Comments? If someone has changed them dramatically and has
   found a satisfying combination, i'd be pleased to see the values...
   - Clusse now warns the ones with the Sysop flag on login, if the amount
   of free disk space goes below 512 Kb.

 0.29f: 17.10.1995
   - If BPQ is not found on startup or is of too old version, clusse returns
   errorlevel 1 instead of 20 to prevent reloading...
   - New parameters to the reboot command: Reboot warm does a warm reboot
   of the computer and Reboot cold does a reboot which looks like a cold
   reboot. Reboot with no parameters just exits clusse with errorlevel 100,
   then clu.bat reloads it... Please note that i have no idea what a multi-
   tasking OS will think about this. When rebooting the computer, clusse
   tries to call several disk cache programs and tell them to flush the
   write-behind caches, but i cannot guarantee it works. After that it waits
   for 15 seconds to allow flushing... should be enough for any cache.
   - The default flags setting in clusse.ini works again.
   - Prompt 6 now works as a default in clusse.ini.
   - A new sysop command Euser (Edit an user file entry). Used to add,
   delete or modify an entry in the local user file.
   - A new parameter for the STatus command: status Files gives some
   information about disk usage.
   - The SHUtdown command now only works for the superuser 8-) ... forgot
   to check the permissions. This is a GOOD reason for upgrading from 0.29d
   or 0.29e!
   - Added a DOS shell (ALT-F10) using TurboPower Software's swapping
   library. Swaps to EMS or disk and leaves only under 5k of Clusse code
   to memory. EMS swapping didn't work for me, with EMM386... I'll try to
   make it use XMS. Returning from the dos shell under DesqView seems to
   close Clusse down, but why?
   - Talk & announce texts are shown in the action monitor.
   - Those who have chosen to receive the user login/logout notifications
   using the Messages command, now also receive the away/here messages.
   Except for their own.
   - Two new variations of the Talk command: TTimestamped adds the current
   time to the beginning of the talk message, like the talk/time command of
   PacketCluster: "OH7LZB talks: <1432Z> Trallala..."
   TReply sends a talk to the originator of the last talk message the user
   has received. TReply doesn't require the recipient's callsign.
   - New command TIMEStamp (yes/no), toggles timestamps in talk, announce
   WX, user, node and link messages...
   - Removed the unnecessary Flags command.
   - Fixed links.ini parsing a bit. 0.29e often lost the last character of a
   line.
   - User add notification messages to users now include the actual home
   node of the user, not the local node callsign...
   - Fixed PC12 (Announcement) format a bit: the Sysop flag is a space, if
   not true.
   - Node route table is not stored in static per-link tables any more.
   Removes the maximum routes per link limit of 255. NRoutes table is
   also sorted, as it's now derived from the node list.
   - Modified valid callsign check a bit, it now requires at least one digit
   and at least 2 letters. Should block corrupted PC messages which have the
   hop count where a callsign should be.
   - Users in talk mode are notified every 15 minutes that they're in talk
   mode & how they can exit it. Some people (including myself) tend to
   forget the fact they're in talk mode, and then wonder why the commands
   won't work...
   - Talk messages don't include a beep if they are from a station you're in
   talk mode with.

 0.30: 13.12.1995
   - Added a DXCC database. Uses the dxcc database cty.dat of the CT ver. 9
   logging program for input, and converts it to two binary files. The cty
   file includes all the necessary information in good format, and it is
   updated pretty often. Thanks to Jim Reisert, AD1DC, for the database!
   Databases are stored in the directory clu\db\. The index file is loaded
   into RAM (XMS, if available) to fasten up searches.
   - In 0.29f, after giving an AWay or a HERe command users didn't get any
   dx/ann etc messages. Fixed.
   - Included support for PacketCluster-type databases, like the QSL
   database. New configuration file db.ini and a new command Find.
   See clusse.doc for more information. If you don't have any databases
   installed, rename or delete db.ini to get Clusse running.
   - Database statistics are available trough the command STatus B.
   - Modified and optimized configuration file reading functions and other
   buffered file reads. Saved some code there. There's an EOF marker in
   links.ini, see the example and add it to your file, too!
   - New optional text file text\newuser.txt, sent to users logging in
   for the first time (not found in the user file).
   - Installed Win 95 on my computer. Clusse runs fine under it, and now
   detects Windows and DPMI.
   - The PC50 user count beacon timer can now be adjusted in links.ini,
   using command U. Default is 15 minutes, minimum  10, 0 disables
   the beacon.
   - Rewrote the function which evaluates the difference between two
   date/time records in days. Should fix problems with expiration.
   - Expiry won't (hopefully) crash to a division by zero on empty files
   nor dump the DX file...
   - Speedup in MID file mounting, disk is now being read in bigger blocks.
   - Reorganized BPQ socket mode handling. Preparing for AutoBIN file
   transfers etc.
   - Transmit/receive byte counters are now stored for every socket. They're
   visible in the socket list (the STatus command).
   - Link failure detection can be customized in links.ini.
   - The DX list is now kept in memory. The size of the list can be adjusted,
   see expiry.ini for details. Update your expiry.ini!
   - The DX list commands LBand, LInfo, LPrefix and LSuffix now all accept
   a second parameter, which specifies how many matched entries will be
   shown to the user.
   - Added some XMS support functions to make the XMS module usable. XMS is
   now being used for storing database index files to fasten up searches.
   You can decide which index files are loaded into XMS in db.ini.
   - New parameter X(ms) for the STatus command: gives information on
   XMS usage.
   - New I/O error handling scheme. Gives more information about the problem,
   when crashing.
   - Rewrote the function which sends specified amount of lines from the
   end of a text file to a user. Now reads the file in 8K chunks. It's used
   in the LErrors command, which used to be very slow.
   - Fixed several things that caused stability problems. Clusse called
   BPQ without initializing some registers correctly and the BPQ switch
   wrote data to *WRONG* places, corrupting memory... it was my fault.
   (To be exact, BPQHOST function 8, callsign connected on the stream is
   returned to es:di. I left es:di pointing somewhere in Nevada when
   getting maxframe and paclen for the stream trough the same function.)
   - Those users with the Sysop flag on have a "!" character after their
   callsign on the user list (doesn't work trough a PacketCluster link),
   so other users know who to talk to if they have problems... Their
   user callsigns don't have the character, but the Talk command strips any
   "!" characters from the recipient field, just to be sure...
   - text\login.txt is loaded in memory to speed up user logins on systems
   with slow hard disks (like my system, OH7RBA). Maximum file size is
   1700 bytes.
   - DX spots originated from the local node aren't accepted when merging
   DX spots on linkup. Fixed, finally.
   - The news file now accepts blank lines.
   - Modified the login function to keep SSID's of 6 and 7. Usually, the
   SSID's of users are set to the first free SSID with the same callsign
   on the cluster network.

 0.30a: 14.2.1996
   - Users can be edited (EUser) when they are connected. Their settings
   are modified in real time. (A good way to confuse them, isn't it 8-] )
   - Database hits count (see STatus B) isn't incremented once per hit
   any more (several hits can exist for once search => over 100% hit
   percentages were possible), but once per search if there were any hits.
   - When clusse is starting up with the -P (pause) parameter, it really
   pauses when the screen is full, and just before switching to
   windowed mode.
   - Speedup in DX file expiry. Added buffered file writing...
   - The nodes.clu file is now sorted alphabetically when new entries
   are added. Delete the file to get the whole file sorted (all entries
   are then placed where they belong to). The file can be viewed using
   the NList command. If the sorting works reliably and fast enough,
   i'll sort the local user file, too.
   - Wrote code to interpret PC protocol messages 28, 29 32 and 42
   (personal message receiving), but left it disabled. It didn't write
   the message anywhere, and Clusse ate it's user's messages from the
   PC nodes... But it's is a good start, isn't it? By the way, Clusse
   does not interpret the bulletin/file forwarding protocol messages
   either, so the neighbouring PacketCluster sysop should use the
   -BULLETIN parameter when doing ADD/NODE for your system to prevent
   PacketCluster from trying to forward any bulletins to Clusse.
   - Tried linking trough an amprnet telnet session (between two NOS
   based internet gateways). Works pretty well after fixing the linker
   script interpreter (telnet "login:" prompt caused a bit of grief).
   - Fixed a couple of causes for range check crashes...
   - Fixed the network users high water mark (broken in 0.30).
   - Added a WWV command.
   - Fixed an OLD bug in the Users listing, line wrapping works now no
   matter how many users a node has.
   - Clusse Announcements mailing list is now available on the Internet.
   It's used for announcing new versions of Clusse & related utilities
   (moderated by me). See clusse.doc, section 8.2, or
   http://zone.pspt.fi/clusse/, the official Web site.
   - The user inactive minute counter (visible trought the STatus command)
   is now updated even if the inactivity disconnect timer is disabled.
   It is also updated for PC links.
   - Fixed the DIsconnect command to disconnect the right stream, when
   the first BPQ stream used is not set to 1.
   - The routes per link count (see the NRoutes command) is now correctly
   decremented when nodes are removed from the node table.
   - From now on, to help those who translate the Clusse help file to
   other languages, i indicate the changes i've made for each version
   in the beginning of the help file.
   - Started to use the network user file, data\netusers.clu. It's sorted
   alphabetically, like the node file. It stores information about the
   name, QTH and home node of each user seen on the network. Home node
   data is taken from DX/Ann/WWV/Talk messages, user login messages, and
   the PC41, subtype 4 message (SET/HOME_NODE command on PacketCluster).
   The data can be reviewed using the User (call) command. The UNetwork
 ! command lists the callsigns in the file. If you are upgrading Clusse   !
 ! from an older version (anything between 0.29 and 0.30), run the        !
 ! 030-030a.exe update program to create the netusers.clu file, based on  !
 ! users.clu. If you're not updating from an older version, just delete   !
 ! the update program.                                                    !
   - Modified the User (call) command to show the BPQ radio port the user
   is connected on. Only works for local users. BPQ doesn't tell the radio
   port, if the user is connected trough NET/ROM. The command also views
   the information available in netusers.clu.
 ! - The date & time format and field separator characters used by Clusse !
 ! can now be changed in clusse.ini. Update your clusse.ini! The QTH      !
   locator of the node must also be specified in clusse.ini.
   - Improvements in the multicasting user interface. See clusse.doc,
   section 6 for details. New configuration file unproto.ini.
   - New command Qth to set the QTH data in the network user file and the
   rest of the cluster (PC41).
   - Two new STatus parameters: Protocol shows statistics gathered by the
   PC link protocol module, Memory shows how heap memory is used.
   - New command Q in links.ini to periodically ping the neighbouring
   node to see if the link is still alive and disconnect, if no respond
   in the time specified. Clusse always disconnects the link, if a ping to
   a neighbouring node times out, so users can also notify the node of
   a link failure pinging it...
   - When decoding NODES broadcasts for monitoring, the Quality value
   for each node is now correct... finally... missed it by 1 byte!
   - In the Users listing, a node is listed only if it's users callsigns
   are known, and there are users on that node. Nodes behind a limited
   protocol link (user data not exchanged) are not shown. Just to cut
   off unnecessary information. The user counts (based on the PC50
   broadcast) can be viewed by either "Users nodecall" or "Node nodecall".
   - The Disconnect command now accepts the callsign of a neighbouring node
   as a parameter. Can be used to disconnect a link without checking the
   stream number from the ST L or ST list.
   - More net/rom header data is decoded for monitoring. Socket information,
   L4 window negotiation on connection and transmit/receive sequence
   numbers are visible whenever they can be decoded. Some other L3 protocols
   are also identified (IP, ARP, RARP, TexNet) but not decoded.
   - A FAQ (Frequently Asked Questions) file is now included in the
   distribution.
   - Added a check for talk message (PC10) loops between two Clusse systems.
   It was pretty easy for an user to put one up.
   - Tested (and fixed a bit) the handling of multiple PC links. Tried
   two simultaenous links to PacketCluster nodes, and it worked. All of
   the protocol functions are not supported (mail, distributed databases
   etc), but you can now use a Clusse in the middle of a network. I ONLY
   tried it out for a couple of days, so it might still be a bit buggy!
   REMEMBER, that you can NOT form a circle-shaped network, messages
   will start to loop! (with the exception of clx listen-only links.)
   - Fixed expiry of netusers.clu and nodes.clu - they used the expiration
   day count specified for the user history file in expiry.ini. Whoops.
   - Valid callsign check now catches callsigns with non-alphabetical
   characters. Only digits (0-9), letters (A-Z) and the characters "-"
   and "/" are allowed. Digits and letters are both required. This should
   clear up corrupted node/user files.

 0.30b: 23.2.1996
   * Mostly bugfixes and improvements in the cluster linking module.
   - Fixed a couple of bugs which caused 0.30a to crash or hang.
   - New sysop command LINK. Three parameters: Connect, Disconnect and
   Hold. The last tells clusse to disconnect a link and not reconnect,
   until it is restarted or adviced to do so using the Connect parameter.
   - Added partial decoding of IP and TCP frames inside AX.25 packets for
   the monitoring window. Only tried it out in datagram mode. JNOS and
   Clusse run fine together under Win95 using the same TNC. I used the
   BPQHOST interface for attaching JNOS to BPQ.
   - The PC link module now forwards remote database PC messages.
   - Added support for PC38, which makes it a LOT harder to create a
   cluster loop by telling Clusse to link twice to the same cluster
   network segment. If Clusse receives a PC38 when linking, and the
   message includes a node callsign which is already in the node table,
   the link is disconnected and set to "held" state (clusse won't try to
   relink). Several similar cases are also handled. This should make
   Clusse very robust against loops and crashes caused by them.
   - Changed the handshaking order (the way how two cluster nodes
   exchange the user/node tables on linkup) to be more compliant with
   the PacketCluster (TM). It worked before, because PacketCluster
   does not care too much about the exact syntax of the protocol, so
   there wasn't any problem, but some other software using the
   protocol might not have worked with Clusse.
   - Added a "listen-only" linking mode. You can now link to two or more
   nodes which are already linked via some other route, but only one of
   the links will be "active". The "listening" links only receive DX spots,
   announcements and WWV data, no information is really sent to those
   links, and the received data is not sent to other PC links. No
   looping occurs! Using listen-mode links requires additional callsigns
   (or SSID's with the same callsign) to be used (one per link). 8-(
   I took the idea from clx. Keep up the good work, guys!
   - Wrote some documentation about PC links and PC network topology.
   Read section 4 of clusse.doc carefully before linking anywhere.
   links.ini has some new documentation, update yours.
   - When PacketCluster distributed a node add message (PC19) which had
   the same node twice (which i didn't quite expect), 0.30a got into an
   internal loop, got stuck, and had to be rebooted. The action line
   always said "Node <callsign> added". Fixed.

 0.30c: 3.3.1996
   * This is mainly a bugfix version for 0.30b.
   - Announcements are no longer accepted from listen-only links. It's
   very hard to catch duplicates, as PC12 doesn't include any kind of
   timestamp. Counting checksums didn't work on the first try.
   - If the callsign of the neighbouring node in links.ini (on the I line)
   was mispelled or otherwice invalid (didn't include the right SSID etc),
   Clusse crashed when the link was made. Now clusse disconnects the link
   (and sets it to held state), if this happens.
   - Added checks for a couple of overflow situations.
   - If a link is set to held mode because of a loop or some similar
   problem, the cause is logged to error.log, so the sysop can find out
   the cause later...
   - Node RTT (Round-Trip Time) of 0 is now accepted.

 0.30d: 8.3.1996
   - Just a quick note: when updating from an older version to 0.30c
   or later, delete your node file to reset the RTT counters. The format
   of the record changed a bit.
   - Support for the PC/FlexNet kernel added as an alternative for the
   G8BPQ Packet Switch. Not fully functional: for example console
   connections don't work at all. Linking works now! Monitoring is buggy.
   The supplied .CON files contain a note about linking trough PC/FlexNet.
   PC/FlexNet support is *ALPHA* code!
   - Fixed some (arithmetic) overflows, which caused a lot of pain in
   0.30c. Calculating the distance between two date/time records CAN'T
   be this hard! Added some sanity checks for incoming values...
   - Loop detection should only hold a link if the local node actually
   is a part of the loop. Previous versions held their only link in
   some cases, when there was a loop elsewhere in the network.

 0.30e: 21.4.1996
   - When a link fails, other links are notified of the lost node routes.
   This was a major networking bug (if multiple links were used).
   - A new user prompt.
   - When a new link is initiated, correct hop counts are used when sending
   the node table to the link. This is a fix for a PacketCluster v5.*
   networking bug, which causes node tables to be distributed farther than
   they should be. It is not possible to use one PC19 message for the whole
   node table, if the correct hop counter is used. The same is done with
   PC16 (the user table).
   - Removed three memory leaks. Including the one in DX expiry (it took
   13400 bytes every time).
   - When clusse crashes, uptime is written to error.log and console.
   - New command line parameter -m to totally disable the band monitoring
   code. The parameter in clusse.ini just disables viewing of the monitored
   packets. If you experience a serious bug in monitoring, you can disable
   it this way.... If you have problems with PC/FlexNet, try this.
 ! - Numerous improvements in database functions. The database               !
 ! configuration file db.ini has changed, update it. From now on, I include  !
 ! the sample db.ini in the doc\ directory. It contains example blocks for   !
 ! all of the supported database types. You have to move it to the clusse    !
 ! root directory to get it working.                                         !
     + Added support for Buckmaster HamCall (TM) CD-ROM callbook as a
       Clusse database. See db.ini and clusse.doc for details. Thanks to
       Buckmaster Publishing for a copy of the HamCall CD (for development
       purposes).
     + Clusse can now share it's local databases with other cluster
       nodes. Other system operators can configure their software to make
       queries to databases on your node.
     + Clusse can also query databases on remote nodes. See db.ini for
       details on configuration. New STatus parameter : ST R shows the
       remote db query job list (just another debugging feature).
   - Fixed PC16 handling: the last (or only) user in a message was
   sometimes ignored by Clusse.
   - Various fixes in the PC/FlexNet interface code.
   - Optimized the code quite a lot, managed to squeeze out nearly 20k
   of code. It should be a bit faster, too. Since i also added features
   in this version, the executable is only slightly smaller than in the
   previous version.
   - Changed the link list (STatus Links) layout. Saved some code, and
   this way it looks OK with over 7 links, too.
   - Added a 5 minute delay between the expiration process of each data
   file. Speedup in the expiration of network user and announcement files.
   - Added a new user file flag "Excluded". Set using the EUser command.
   Please, use it only when *absolutely* necessary. Sysops and excluded
   users never expire in the local user file. You cannot exclude sysops
   (i don't want to exclude myself from my own node by accident).
   - Rewrote the STatus Memory command and added some internal heap usage
   tracing. Eases up my life when hunting memory leaks.
   - Changed the way user and node lists are handled internally. Every
   entry takes 4 bytes more than before, but it is simpler and more robust
   this way.
   - New cty.dat (dated 20. December 1995) included in the distribution.
   (It's the DXCC database for the Prefix command.)
   - Changed the behaviour of the Away command: the away text string can
   be changed while being away.
   - Fixed XMS handling to work with most XMS managers. According to the
   XMS specification, you can move only an even number of bytes from an
   XMB to base memory (and vice versa). I didn't notice this. It DID
   work under Win95 (!), but not under plain old DOS. Please let me know
   if you still get "Invalid length" crashes when using XMS for databases.

 0.30f: 3.6.1996
   Known bugs in 0.30e fixed. Thanks to all the people who reported these.
   - Fixed XMS handling again: the moves from base memory to XMS must ALSO
   be of even length (gee i'm stupid)! The fix changes database handling
   a bit, be sure to delete your index files (*.idx) in the db\ directory,
   it forces Clusse to reindex.
   - Fixed some overflow errors: mostly caused by unexpected input from
   PC links. Even more validity checks added.
   - You can no more use the DIsconnect command to disconnect yourself.
   This caused unexpected results (which were most visible when you
   were on the console - ugh). The Bye command does the trick anyway 8-).
   - Remote databases can now REALLY have a timeout over 255 seconds,
   up to 65535. It used a byte-sized temporary variable by accident,
   thus restricting the timeout to 255 seconds.
   - If you searched the last record of a PC-type local database and
   the record didn't end to a "&&" line, clusse got into a loop. Fixed.
   By the way, i got the database definition wrong in the first place.
   The "&&" line marks the END of a record, not the BEGINNING of a
   record. Clusse really doesn't mind: it doesn't require a && in the
   beginning of a file (as it did before) or the end of a file (as it
   should do and PacketCluster (TM) probably does).
   - The Wx command requires the area parameter again, just like the
   Announce command. Update your help file! The area parameter
   can be either F, FULL or * for a cluster-wide announcement, a node
   callsign for distribution on a known node, or L/local for the
   local node only. Usually, you don't actually want to tell your
   local weather conditions to the whole world. Ok, you're right,
   that's what hams on HF usually do, but that's a different matter.
   This is packet, not HF. 8-)
   - Cleared up a mess in the methods of storing & moving around the
   name of the user. It's no longer stored in the local user file. It's
   only in nusers.clu. The EUser command cannot be used to change the
   name any more. Anyway, the system should behave a bit more logically.
   - Database files are kept closed when not used. Forgot to close()
   after checking them on startup.
   - The latitude and longitude fields of the Buckmaster HamCall
   CD-ROM (TM) were swapped. Fixed. (my mistake, not theirs)
   - If you did SU succesfully, then (during the same session) did SU
   again, but failed, you still had SuperUser privileges (in fact,
   you had ALL the privilege flags). Fixed.

 0.30g: 22.6.1996
   Just a bugfix version for 0.30f, while waiting for 0.31.
   - Found an ooooooold bug in the linker: it didn't always catch the
   PC18 if it came in the same frame with PC38. This resulted in a
   timeout....
   - Attempt to fix a range check crash. I was unable to reproduce it,
   but at least i tried.

 0.31: 20.8.1997
   - New setup program SETUP.EXE. Sings and dances in full color.
   Makes the following configuration files obsolete: clusse.ini
   expiry.ini password.ini. You can delete them. SETUP.EXE creates a
   binary configuration file clusse.cfg WHICH CANNOT BE EDITED BY HAND.
   I did this primarily because i wanted to get into object oriented
   programming. Additional benefits:
     * I'm able to remove some code in clusse.exe. Clusse.exe doesn't
       need to read & parse & range check the ascii files. setup.exe can
       do extensive checks for the values, preventing you from entering
       illegal values (most of the error reports i get are configuration
       problems).
     * Clusse.exe can easily modify the configuration in the file using
       remote sysop commands etc.
     * Using autobin transfers (bput/bget) it's very fast to move the
       whole configuration home for remote configuration.
     * Includes a cross-referenced on-line help system. Just press F1.
       The help file is not very complete, yet. But it helps.
     * When new configuration options are added, there's no need to add
       the new things to the configuration files by hand. Just run
       setup.exe (it converts clusse.cfg to the new format) and modify
       the new parameters to suit your needs.
     * Includes a 64k ascii editor. With clipboard and most of the usual
       Wordstar-style keyboard commands. Beats DOS EDIT. 8-)
   - New user privilege group system. In the setup program you configure
   up to 20 groups, what the users in each group can do, what's the
   default user group for new users, etc etc. Then you can use EUser
   sysop command to move users from group to another. Now, when you want
   to change the access policy, or i introduce new access features, you
   just edit the group information (no need to edit each user individually).
   Group 20 is reserved for the SuperUser (ie. can do everything). After a
   successful SU command the user is moved to group 20 (for the duration
   of the session). You can control which groups are allowed to use the
   SU command to give the operator password (reserve it for the operator
   group). Read the related parts in clusse.doc !!
   - A lot of new access control features (new things which can be
   enabled/disabled per user group).
   - The new options above changed the format of the user file. A conversion
   program 030-031.exe is included for converting the user and dx files
   to the new format.
   - New logging features.
   - New user command TIMEReset, toggles the sending of inactivity timer
   reset frame. (It's a 1-byte frame sent when the user's link has been
   inactive for a pre-defined amount of time. Used to keep inactivity
   timers in nodes from disconnecting users.)
   - You can now use 28- and 43-line text modes on a VGA monitor.
   - The talk command accepts an abbreviation as a recipient callsign, if
   it's unique (eg. matches only *one* user in the network). Only works for
   talking to other users (not nodes). You can even do a "t b Hi there!"
   if there's only one user, whose callsign includes the letter B!
   - New directories: clu\user\ (public file directory for users),
   clu\user\incoming\ (public directory for user uploaded files),
   clu\userdata\ (per-user data files maintained by Clusse) and
   clu\pg\ (for PG "Plugin" binaries).
   Clusse.exe creates these automatically.
   - New commands for handling files and directories: dir, cd, md, rd, del,
   copy, move. The new access control features include the possibility
   to restrict read/write access per group. The commands are not very
   featured, for example they don't take wildcards at all (with the
   exception of DIR, which understands them to some degree).
   PLEASE BE CAREFUL WHEN ALLOWING YOUR USERS TO USE THESE COMMANDS. THEY
   MIGHT HAVE SECURITY LEAKS AT FIRST - YOU ARE THE BETA TESTERS! REPORT
   ANY PROBLEMS.
   - New command "RUn" for executing DOS programs. The output of the
   program is captured and sent to the user after the program finishes.
   Redirection only works for programs which don't use direct video I/O.
   The only way to feed input for the program at runtime is to put the
   input to a file and then redirect it for the program (eg.
   "RUn program.exe < input.txt") so be careful. If the program gets stuck,
   or asks for input, you must be at the console to get it running again
   (you can give the program some input from the console keyboard).
   Does not search the PATH for the executable, you must specify the
   full pathname to the program if it's not in the current directory.
   Clusse swaps to disk while executing the programs to give them as much
   free base memory as possible. Clusse also swaps the screen, so the
   console doesn't get messed up in case of direct video I/O.
   PLEASE BE CAREFUL WHEN ALLOWING YOUR USERS TO USE THIS COMMAND.
   - New command "DOs" for executing dos commands. This effectively does
   a "command.com /c run_this_command" (the COMSPEC environment variable
   must be present and point to a valid command.com or a replacement like
   4dos.com). Don't let your users use this command, since they can do
   anything they like on your disk if they get to feed commands to
   command.com... and use a good secret number! command.com searches the
   PATH if you use this command to run executables.
   - New command "PG" for executing F6FBB-style PG "plugin" programs, which
   can implement interactive extensions for Clusse.
   - Forgot to close the fortune database file after startup, if it was
   not reindexed. Fixed.
   - If possible, the MID table is stored in XMS.
   - The node and link lists can also be sent automatically at login.
   - The EUser command has changed so that all the new user file stuff
   can be configured. EGroup command will come, too.
   - Reorganized the code a bit. Changed the linking order of the modules,
   resulting in only under 3 kb of resident code during a DOS shell. Also
   managed to optimize the code by about 10 kb.
   - A new, proper command parser. At last. Compares the whole command:
   "saari" is no more interpreted as "say".
   - The length of away reason strings is limited to 80 characters. Saves
   memory and prevents a crash in a certain situation.
   - The conference user list is now sorted. Fixed a couple of bugs, too.
   Removed some unused code.
   - A completely rewritten List command. Replaces LPrefix, LSuffix, LBand
   etc commands. Does fancy things like "List 20 From oh* Call dx?a*"...
   - Added some decoding of ICMP and TCP frames and NET/ROM flags (nack,
   fragment, choke) in the band monitor.
   - The bands.ini file (which has been in the distribution for a while)
   has changed it's format and is now really used! DX spots entered by
   users are checked against this table, effectively preventing
   out-of-band spots. The band names are used in the List Band and FILter
   commands.
   - A new command "LOCator" to set the mainhead QTH locator of the user.
   - A *very* flexible DX spot filtering system. The command "FILter" is
   used to view and modify the per-user filters, and the filters are
   stored in the file clu\userdata\<callsign>.fl.
   - In case of a crash, the string in the parser buffer (the last user
   command etc) is writed in the error log. Helps a lot when trying to
   figure out what happened...
   - The AWay command cannot be used to remove the away mark any more,
   the HERe command must be used. You can still change your away string
   without marking yourself as being here first. The old behaviour
   was somewhat confusing.
   - Making the console nicer part 1: The window sizes can be adjusted
   using ctrl-pgup/pgdown. Monitoring works in 25-line screen mode.
   - Incoming PC links work. See links.ini for changes! You can link
   two Clusse systems.
   - New BPUT and BGET commands. Used for up/downloading binary files
   using the autobin protocol found in most modern packet terminals.
   NB: While transferring a file the user can not receive DX spots,
   talks or any other messages!
   - Doesn't send PC16's with no users when linking.
   - The DX spot frequency accuracy is now limited to one decimal. Also
   removed some rounding problems with the frequencies. The frequency
   format in the dx.clu file changed, so the converter program 030-031.exe
   has to used to convert the file to the new format.
   - The UNetwork, UList and NList commands accept a parameter of a
   wildcard key to be matched against the list (un oh* shows only
   users with the OH prefix).
   - New variation of NList: NLVersion also shows the version number of
   each node. (Faster way to check the Clusse vs PacketCluster ratio
   in Finland: nlv oh* 8-)
   - The Prefix command now shows the coordinates like it should. Delete
   db\dxcc.* to force a re-read of cty.dat, it'll fix the inverted
   longitude.
   - New command "PRIvileges" shows the privilege group the user is in,
   and the privilege flags for that group. Another new command "Group"
   shows a list of groups, or, with a parameter of a group's number,
   shows the privilege flags for that group.
   - Fixed the DIsconnect command under PC/Flexnet.
   - In the users list, if the user count (as distributed in the PC50
   messages and shown on user and node lists) does not match the amount of
   known users (as distributed in the PC16 messages), the user count is
   shown as "<13>" (normally "(13)"). This indicates, that the user list
   cannot be trusted and is not updated properly. The user count is
   most probably correct. The problem is caused by a networking bug in
   the PacketCluster v5 protocol, which causes user and node lists to be
   distributed farther than they should. See tech.doc section 4 for details.
   - Fixed a bug in the Prefix search. For example, "Prefix XX9X" now
   correctly returns Macao instead Madrid.
   - New command O in links.ini: used to change the local AX.25 callsign per
   link. With the G8BPQ switch it equals sending a line "*** LINKED TO
   callsign" to the node in the beginning of a .CON script. Which obviously
   didn't work with PC/FlexNet...
   - Widened the user and node counter fields on the first status line. It
   can now show 99999 users, 999 local users and 9999 nodes. (Okay, Clusse's
   local user limit is 64. Let me know if it's a problem for someone, since
   it's easy to support more on PC/FlexNet.)
   - If a PacketCluster node tries to forward mail to Clusse, the recipient
   user is notified of new mail on that node (using a talk message).
   - Changed the link list from static (10 entries) to dynamic, removing
   the stupid 10-link limit! The amount of simultaenous links is now
   limited only by the available heap memory (about 150 bytes/link 8-).
   - The P command can now take more than 2 parameters at a time, for
   example, "p pc in hold". Also added some more nice warnings in the
   links.ini parser.
   - If started with the new command line parameter -i and DPMI detected,
   releases the timeslice using the DPMI call. Makes clusse load the
   multitasking system less. Works at least in Windows and OS/2.
   - Increased the limit of maximum DX/WWV messages merged on linkup to 255
   (the M command in links.ini).
   - New sysop command MERge for manually requesting DX/WWV merges.
   - New commands PUt and GEt for ASCII file transfers with CR <=> CR/LF
   EOL translation.
   - The away time is correctly reset to the current time when a new
   network user is added
   - As always: a bunch of smaller bug fixes. And probably a LOT of new bugs!

