CFROUTE - A Freeware Fidonet Netmail Packer for Binkley Outbounds
HISTORY FILE
-----------------------------------------------------------------

The Initials of the contributors to this software are marked in square
brackets after the features/fixes that the person contributed.  A list of
contributors can be found at the end of this document.  If all changes in a
specific alpha release have been made by the same person, the person is
only mentioned in the headline of that alpha release, rather than after
each feature.

Current CFRoute
---------------
    - Chg: Adapted fc2cfr to recent fidoconfig change in logic of
      parsing route, routeMail, routeFile. See Fidoconfig ChangeLog
      entry from Mar 9, 2001.

CFRoute 1.0 stable (forked off for release at 08 Oct 2000)
----------------------------------------------------------
    - Fix: Modified the handling of LASTRUN.CFR. Previously, on some Unix
      variants, it could happen that a file that could not be processed
      because the destination link was busy was NOT reprocessed on a later
      run, unless you used the -I option.
    - New: Keyword KILLTRANSITFILES. If this keyword is set, attached files
      from intransit mail will be deleted after the mailer has sent them, even
      if the (transit) mail did not carry the KFS flag. [TE]
    - New: Keyword INBOUND. With this keyword, you can configure the
      directories where cfroute will search for file-attaches from in-transit
      mail. This is necessary when the tosser does NOT add the correct path
      name to the subject of netmails with file-attaches, like e.g. hpt.
      When the tosser does append the path (like Fastecho), you don't need
      the INBOUND keyword, although it won't to any harm. [TE]
    - Fix: LASTRUN.CFR did not work properly on Unix - cfroute was always
      rescanning the complete netmail folder, instead of only new netmails.
      This is fixed now (if you want the old behaviour, use the -I command
      line flag). [TE]
    - New: Preliminary FIDOCONFIG support. You can use the FC2CFR program,
      which is now part of cfroute, to generate a working CFROUTE
      configuration file from your fidoconfig configuration file. [TE]
    - If the new keyword "NOLOOPROUTE" is set in the config file, we will not
      pack a mail if we have detected a possible  mail loop. [TE]
    - New: Mail with Immediate flag is now packed as IUT instead of OUT, and
      you can specify "Immediate" as a routing flag in the ROUTE statement
      in the config file. Attention: Some mailers (e.g. BTXE) don't support
      the IUT flavour. So don't use the Immediate flag nor a "Immediate"
      routing statement if you have such a mailer. [TE]
    - New: Support for JAM Message base (NETJAM keyword). This requires
      SMAPI 1.6.4b or newer! [TE, with help of the JAM part of smapi, written
      by Fedor Lizunkov's and Pavel Gulchouck]
    - Fix: Removed all fread/fwrite calls that read directly into structures.
      Cfroute now works without structure packing, independently of
      endianness or other architecture details. You can now use cfroute
      on any Unix machine, RISC or Intel. [TE]
    - Fix: Another bugfix for the handling of EXCEPT statements [TE].
    - Fixed some crashes on bad syntax in the configuration file. [TE]
    - Fix: Month field was set one too high (0 = January, but CFRoute
      wrote 1 for January, and so forth) [TE]
    - Fixed a crash when trying to route intransit mail without VIA
      kludge (this can only occur if other systems are misconfigured). [ED]
    - New keyword "RECODE". Simply do not use it. It is a TEMPORARY
      WORKAROUND for people in the Russian language area that do not yet
      support CHRS kludges according to FTSC. It takes as argument a
      recoding map similar to the one that hpt uses, and will recode all
      incoming messages from the transport to the local charset, and all
      outgoing charset from the local to the transport charset. [ED]
    - Fix: Fixed permissions of newly created directories on Unix. [ED]
    - Fix: Message hour, minute and second information in Squish folders
      contained nonsensible values (message *read* only, so non-fatal). [ED]
    - Fix: The "EXCEPT" statement did not work as stated in the doc,
      (where it says that it applies to all node numbers following the
      EXCEPT keyword, and you have to specify another EXCEPT to undo the
      first one), but it did only apply to the nodenumer immediately
      following the "EXCEPT". ATTENTION! THIS MAY BREAK EXISTING
      CONFIGURATION FILES! CAREFULLY CHECK YOUR USAGE OF THE EXCEPT
      KEYWORD!!! [TE]
    - Fix: The "EXCEPT" statement did not work for "FROM" routes (EXCEPT
      clauses were always considered as applying to the "TO" mask). [TE]
    - Fix: Routing dependent on the day of the week did not work on Sundays
      (i.E. "U" was not recognised as specifying Sunday in the route
      statement). [TE]

0.95a [TE]
-----------
    - Cleaned up the source code tree, moved things into subdirectories,
      wrote documentation on how to compile the code, etc. Generally,
      it is now much more easy for other programmes to contribute to
      CFRoute.
    - Enabled the Squish interface. Use "Netsquish" to define a Squish
      netmail area. This code is experimental. Do not use on production
      systems. Please send bug reports.
    - Added a Linux version. (other Unixes to follow later).
    - Bit 11 of the attibute word in a mail is now recognised as "Direct"
      flag, as used by Timed, Msged and others.
    - Change in VIABOSSDIRECT behaviour. This keyword specifies that direct
      mail to a point should be routed via his boss. The change is that
      if the boss of the point is ourselves (i.E. if the node part of the
      point AKA is one of our addresses), the mail is not routed to the
      boss, but directly to the point.  (Routing mail to ourselves does not
      make much sense after all ...).
    - CFRoute will not only check for, but also create .BSY flag files
      in the Binkley outbound (if IgnoreBSY has not been specified).
    - Reworked the FASTECHOPACK feature. Before you try to use it, do
      read the manual section about it, especially the paragraph labelled
      with "ATTENTION!!!". You have been warned. Fixes and changes on this
      part include:
      - QQQ files are no longer created in the OUTBOUND directory. You
        must specify a sepearte QQQOUTBOUND directory for QQQ files.
      - Only bulk mail that is addressed to a link of your system is
        stored as QQQ file in the QQQOUTBOUND directory.  The reason is
        that only this kind of mail can be properly processed by FASTECHO
        PACK.  All other mail, i.E. direct, crash, etc., mail, or mail to
        unknown systems, is packed in unarchived form directly into the
        Binkley outbound.
      - Fixed handling of file attaches.
      - Fixed name generation scheme of QQQ files.  It though is still not
        completely non-intersecting with the Fastecho scheme. See the
        manual entry on FASTECHOPACK for more information.
    - Fixes for GNU compilers.
    - Year 2000 fixes.

0.94a [CFS]
-----------
    - Fixed a potential problem with directory naming. Never ocurred but
      one never knows...
    - NoDomainDir should be working as expected.
    - CFRoute can now import data from FastEcho. See FEConfig in the
      documention.
    - Corrected a few things on the documentation.
    - NOPACKFILES wasn't working - one had to use NOPACKFILE to make it
      work.
    - NOPACK* was only working for netmail to be routed, but it was
      packing netmail to be sent direct.

0.93a [CFS]
-----------
    - Fixed a potential problem regarding messages headers containing %.
    - INTL lines now has priority over .MSG headers, i.e. if the header's
      net & node info don't match the INTL info, the INTL info will be
      used.
    - Replaced the English manual with the new one. It is still a draft,
      though, being revised by a English-speaking person. New documentation
      in Spanish (by myself), German and Dutch will follow.

0.92a (not publicly released) [CFS]
-----------------------------------
    - Added a work around for misbehaved (IMHO) editors using newlines
      characters.

0.91a [CFS]
-----------
    - Via lines are now directly added to the .PKTs rather than
      signing the .MSG first. CFR was signing .MSGs because it
      allows to see the Via line added to local messages (it made
      no difference to in-transit messages, obviously) and it
      was nice for debugging, but it is no longer necessary.
    - Point number is no longer added to via lines if it is zero,
      i.e.
        Via 2:341/70.0@fidonet.org...
        is now
        Via 2:341/70@fidonet.org
      This is the way most program sign.
    - Empty path lines are no longer logged.
    - Fixed a bug regarding EXCEPT.

0.90a [CFS]
-----------
      ===============================================================
      First: Since we have reached 0.90, I think it is time to stop
      adding features and start hunting bugs seriously. Please report
      anything that you think to be a bug, or a possible bug. CFR 1.0
      has to be bug free.
      0.91 (unless it is released sooner than I would want to because
      of a bug) will include up-to-date manuals (English & Spanish,
      other languages welcome if any one is willing to do the
      translation).
      ===============================================================
    - Fixed the most stupid bug ever: CFR couldn't parse this month's
      messages because I have used "Dic" instead of "Dec" as the first
      three letters (in Spanish the last month of the year is
      "Diciembre"). No harm caused by this. CFR couldn't tell the
      messages' age, that's all.
    - Fixed a bug related to address comparison.
    - Added path logging. If LOGPATH is specified, CFR attempts to
      parse Via lines and to provide the path the message followed.
      Example:
      Path: 2:346/10.2 -> 2:346/10 -> 2:346/3 -> 2:348/201
    - As a result of the work on the path stuff, the loop detector works
      again 100%. Remember how it worked: If a local via line is found
      followed by a non-local line (thus the message left our system
      but now it back), CFR logs all via line since the last time
      the message was processed at home.
    - Added FASTECHOPACK. If you were using FASTECHO PACK and have switched
      to CFR, but still want to send netmail inside the compressed bundled,
      this one is for you (not for me; I prefer using .?UT). If used,
      CFR will create .QQQs instead of .PKT. FastEcho will pack them with
      its own .QQQs.
    - Added NODOMAINDIR, if used CFR will not use the domain name to
      get the outbound dir name. Instead, the default directory (plus
      the zone number if different than the main zone) will be used.

0.89a [CFS]
-----------
    - Fixed a small bug related to INCLUDE'ing. A warning was being
      incorrectly issued.
    - Added KILLINTRANSIT per request of Squish users. If used, CFR
      will delete exported messages with the In-Transit flag event
      it doesn't have kill/sent set.

0.88a [CFS]
-----------
    - EXCEPT was being incorrectly parsed as FROM.

0.87a [CFS]
-----------
    - Windows 32-bit versions included. It compiles, that's all I
      guarantee. Absolutely untested by myself.
    - Fixed a problem regarding multiple netmail directories in the OS/2
      version.
    - Skipped messages are touched so they are not skipped in the next
      run (because of lastrun.cfr being newer than the message file).
    - Paths are now stripped from the subject line on attaches (only
      filenames are left).
    - Fixed a bug in the address solving function.
    - Message bodies wasn't being checked for illegal 0s before the end
      of the message. This is now corrected and CFR will only copy to
      the first zero.

0.86a [CFS]
-----------
    - The OS/2 version is now compiled with GCC. Note that now the EMX
      run-time is required (even though I don't use any of the EMX
      extensions). Please send input about noticed performance changes.
    - Fixed a bug with the from specs.
    - Added support for multiple netmail directories. Now you can use
      as many netmail sentences as you want.

0.85a [CFS]
-----------
    - Added a '-V' switch that forces CFR to log all via lines. Note that
      the generated log most likely be very big. It is only used for
      debugging purpuses.
    - Added domain support for routing. Only to be used when there are
      two nets with the same zone number.
      Example:
        route-to 2:341/70@fidonet 2:341/*
        route-to 2:600/0@example 2:600/*
    - CFR was always using the main AKA for the packet header. Fixed.
    - Added a new macro, LOCAL, which is replaced for all local addresses.
      I use it to avoid routing of local attaches, i.e.
        DIRECT-FILES * FROM LOCAL
      I have unintentionally routed a couple of big files so I decided to
      make sure that wouldn't have again.
    - Added VIABOSSHOLD and VIABOSSDIRECT. These two commands make CFRoute
      send hold and direct (direct including crash, inmmediate, etc) netmail
      to points thru their bosses. Usually viabossdirect will be used, and
      viabosshold will not. Note that these commands don't apply to message
      with file request.
    - CFR now honors busy flags (.BSY files). By default it won't export
      any netmail whose waypoint is busy. Use IGNOREBSY if you want CFR
      to ignore these flags, but it is not recommended.

0.84a [CFS]
-----------
    - Updated English manual with the last what's new entries.
    - The in-transit flag is now stripped from the messages. I'm not sure
      why this should be done, however I've got a complain from a downlink
      and FastEcho does this, so just in case...
    - Also stripping the local flag :-)
    - Changed again the route system. The points are not being assumed any
      longer, UNLESS a ASSUMEPOINTS is used. Ie.
      route-to 2:2453/1031 2:2453/1030 -> 2453/1030.0
      but
      ASSUMEPOINTS
      route-to 2:2453/1031 2:2453/1031 -> 2:2453/1030.*
    - Removed the waypoint assumption, i.e.
      ROUTE-TO 2:2453/1031 2:2453/1030 doesn't mean
      ROUTE-TO 2:2453/1031 2:2453/1031 2:2453/1030.
      If you want to do that, use ASSUMEWAYPOINTS.

      I think those two keywords (ASSUMEPOINTS & ASSUMEWAYPOINTS) will
      keep happy everyone.
    - Added a command EOLENDSCOMMAND. If used, a command is finished
      when the line that has it ends. Example:
      ROUTE-TO 2:2453/1031
      1030
      is the same as route-to 2:2453/1031 1030
      but
      EOLENDSCOMMAND
      ROUTE-TO 2:2453/1031
      1031
      is read as ROUTE-TO 2:2453/1031
      and then a 'unexpected 1031' error is issued.
      Note that DEFINEs are ended too! So if you use EOLENDSCOMMAND, you
      no longer need to use ENDDEFINE.

0.83a [CFS]
-----------
    - Changed format of ^AVia line to the format used by most software
      today, i.e. ^Via address @YYYYMMDD.HHMMSS software
    - Added a new command, DEFINE. Define allows to create user-defined
      macros.
        Syntax: DEFINE macroname [anything] ENDDEFINE
      Then simply use the macros anywhere. Macros can contain both commands
      and parameters, even other macros. They can be used for the most
      simplest things, such as
      DEFINE NORTH_AMERICA 1:* ENDDEFINE
      DEFINE REST_WORLD 2:* 3:* 4:* 5:* 6:* ENDDEFINE
      DEFINE GEORGE_PEACE 1:270/101 ENDDEFINE
      DEFINE MANUEL_FUENTES 2:348/201 ENDDEFINE
      ROUTE-TO GEORGE_PEACE NORTH_AMERICA
      ROUTE-TO MANUEL_FUENTES REST_WORLD
      and also for complex things, such as including a complete region
      routing with dozens of route-to statements.
      Of course, circular references are not allowed, ie.
      DEFINE TEST1 TEST2 ENDDEFINE
      DEFINE TEST2 TEST1 ENDDEFINE
      TEST1
      will cause CFR to terminate inmediately.

0.82a [CFS]
-----------
    - Fixed a stupid bug that caused certain messages to lock CFR.
    - Waypoints are now targets and .* is assumed if no point specification
      is given, i.e.
        route-to 2:341/70 2:341/62
        means route-to 2:341/70 2:341/70.* 2:341/62.*
    - To avoid confusion, the main address is no longer used to complete
      waypoints. Waypoints have to be full 4D addresses, so
        route-to 70 62
      is NOT valid. It has to be route-to 2:341/70 62
      I have changed this because changing the main address would change
      the complete meaning of the route tree.
      You can still use the main address as a seed to complete AKAs.
    - Changed address resolving.
        - For routing sentences: Every address is completed using the
          previous address (remember: the starting address -waypoint-
          has to be 4D). Ie:
            route-to 2:2453/1031 1030 means
                route-to 2:2453/1031 2453/1031.* 2:2453/1030.*
            route-to 2:* 1030 causes an error has 2:* can't be used
            to resolve 1030.
        - For passwords & packet2: Sames rules as for routing sentences.
        - For AKAs: Main still has to be 4D. Next AKAs are resolved
          using the previous defined address, ie:
            MAIN 2:341/70
            AKA 400/0 10 .2 -> AKA 2:400/0 2:400/10 2:400/10.2
    - Added a new parameter, -D, to force a complete listing of the
      arrays creating upon reading the config. file(s). If you think
      CFR is not working right but you don't like the debug version,
      use -D with the normal version.

0.81a [CFS]
-----------
    - Fixed a major bug in the MYPOINTS macro handler.

0.8a [CFS]
----------
    - The OS/2 version now makes sure there isn't another copy of
      CFRoute running. If you want to prevent this problem in DOS,
      you can create a file yourself and destroy it after CFR
      exits. Example:

      ECHO . >RUNNING.CFR
      CFR-DOS
      DEL RUNNING.CFR

      Check for RUNNING.CFR with CHECKFILE, as explained below.
    - Added a new command, CHECKFILE file_name. If the filename specified
      as parameter exists then CFR exists inmediately without any
      processing. Most common use is to avoid running CFR and the tosser
      at the same time. You can use as many filenames as you want, and
      you can use wildcards. Example:

      CHECKFILE H:\FETOSS\FEBUSY.*
      CHECKFILE H:\CONTROL\ONPROC.NOW

      causes CFR to exit if FastEcho is running or if ONPROC.NOW (that's
      a file I use in my batches) exists.
    - Changed wildcarded address parsing a bit. Shouldn't make any
      important difference.
    - PASSWORD now allows wildcards.
    - MYPOINTS was adding .* to all AKAs, including those with a point
      number, which should be skipped. So,
            ADDRESS 2:341/70
                AKA 2:341/31.15
             DIRECT MYPOINTS
      MYPOINTS was being processed as 2:341/70.* (correct) and 2:341/31.*
      (wrong). Now it is correctly ignoring the addresses with a point
      number. In the above example, only 2:341/70.* would be processed.
    - Fixed a problem in the calculation of the day of the week in the
      OS/2 version.
    - Configuration file parser rewritten. It was becoming a bit complex
      so I have decided to rewrite it right before it was too late.
      Everything should work exactly as before.
    - Added a NOPACK (and its counterparts NOPACKFILES & NOPACKMAIL)
      to leave netmail untouched. I think the primary use for this command
      is to avoid EXCEPT repetitions. A single node may qualify for many
      routing sentences, so instead of excepting it from each one, a NOPACK
      command is used at the end of the file.

0.72a [CFS]
-----------
    - MSGID is used to get the zone information if no INTL kludge is
      found.

0.71a [CFS]
-----------
    - Fixed a bug in the lastrun.cfr processing.
    - Finally found a bug that was turning me crazy. Messages with
      an extension other than ".MSG" were being ignored, including
      files with a '.msg' extension!!!! Thanks to Dana Booth for
      pointing out that something was wrong with the OS/2 version.
    - Added an argument parser, read the documentation for a complete
      explanation.

CFRoute 0.7 alpha [CFS]
-----------------------
    - Fixed a bug in the parser. * wasn't being parsed as *:*/*.* but
      main_zone:main_net/*.*.
    - Changed logging system. Only netmail that are packed get logged.
    - Via lines for netmail already processed in the system (i.e. looped
      netmail) are logged. Note that CFRoute will only log from the
      last Via line generated at the system being run, not all via
      lines.
    - Added a control file (LASTRUN.CFR) that keeps track of the last
      time CFRoute was run. CFRoute will not process any netmail whose
      file date is older than the last time CFroute was run. This saves
      a lot of time.
    - Added a new command, INCLUDE. It is (obviously) used to include
      a file as part of the configuration. For example, the main config
      file could be

        INCLUDE AKAS.CFR
        INCLUDE ROUTING.CFR
        INCLUDE PASSWORDS.CFR

      As of now this feature is not really very important, however if
      tracking features (such as bouncing) are written the configuration
      file will become a lot larger.

CFRoute 0.6 alpha [CFS]
-----------------------
    - Fixed a bug in the non-debug version. A password command was
      causing a topdown request to be processed.



List of contributors in alphabetical order with most recent known contact
-------------------------------------------------------------------------

[CFS] Carlos Fernandez Sanchez, cfs@nova.es
[TE]  Tobias Ernst, 2:2476/418.0, tobi@bland.fido.de
[ED]  Eduard Dulich, 2:464/98.0
