V2.04
   - changed the stack to contain 50 entries. 10 is way too small!
      and corrected the display of the stack length.

   - added display of 40 zones in cqww

   - right-aligned the cqww zone if one digit is entered.

V2.05 

   - Allow CQWW to terminate the line in the zone field.
   - There were two serious bugs in the backup function (of all places!).
      An unterminated comment removed some code and a *pp++ should be *pp;
      It was supposed to remove nulls and early linefeeds from the QSO
      before it was written out but it dodn't do that so that the QSO log
      was seriously corrupted.
   - There is still a bug in all programs because the null and/or early
      linefeeds shouldn't be there anyway.
   - Mods to the prefix structure and getlist so that there are a fields
      containing a count of the number of CQ and ITU zones so that a mod
      can be put into the contest programs to fill in the CQ zone if there's
      only one for the country. Currently it is in CQWW.

   - Fixed a bug in the dupe routine in CQWW. Must not beep() before the
      audio.device is open.

   - Fixed some errors in the long arithmetic required in edit().

   - The SS contest does not need tabs between the exchanges (only after the
      callsign).

   - The dupe process will now consider calls such as ve5va and ve5va/6 as
      equivalent.

V2.06 7-NOV-92
   - fixed the routine which matches section abbreviations. It appears to
      match all of them correctly now. There was an error in the wildcard
      matching.

   - found out why the log files were getting trashed. The amiga "ed"
      editor removes the blanks from the last line of the file if you
      write it out again. If this file is then reused as the log file, all
      subsequent QSo entries will be in the wrong place.

   - found out why AK was being marked as a QSO even if it hadn't been
      contacted. Was using "secs" as the name for the array. But this is
      also the global name for the number of seconds to be displayed in
      the time!

   - found and removed the code that was blanking out part of the multiplier
      field (e.g. the O in ORG in the SS program). I had code to display
      XX if the band was wrong in score() but this isn't too informative so
      have removed until I come up with better idea.
   - must be careful of strcpy into data[] or logptr since it copies the
      null.
   - add shortcuts to the % commands so that a control key combination can
      be used instead. E.g. %E can be replaced by control-E.
   - add right-amiga-B to make the current screen go to the back.
   - SS now has w-ve.list to allow it to distinguish DX and Canadian/U.S.
      stations.
   - Removed the Disable/Enable around the code transmission and used Timer
      B in 8520 B instead of Timer A.
   - added some code to the joystick port to read the CW being transmitted
      but this info is not used yet.
   - found a bug in the ft767 code. Had char *array[] instead of
     char array[]. Don't know yet if this will make a difference.
   - changed timing routine for morse code transmission. It now figures out
      how many ticks are required for each unit time instead of the number
      of half-milliseconds.
      Need to reset clock after the key has been used.
   - clock is reset every 30 seconds.
   - bug in edit did not reset value of "id" to zero.
   - add scpy to log.c  copy string without the null.
   - Bug in ESC code processing fixed (from VE5CB).
   - the redisplay after an Edit was not showing the zones table.
   - all the list files are now in one directory and are accessed using the
      environment variable LOGLIST
   - fixed reporting in carf. Display wasn't correct after the report.
   - fixed bug in ic735 driver. Wasn't setting lastfreq when rig freq was
      changed.
   - remove some extraneous routines from curses (including the scroll).
   - Fixed SS dupe sheet which always had CW on it even for SSB. (Tnx ve5cb)
   - Fixed bug in use of getenv - (tnx ka8cte).
   - Changed cantimer() to Wait(timebit) and WaitIO() after AbortIO().
   - Fixed bugs in ic735 driver. Was using CSTART to test for echo but if
      IC735 sees 3 CSTART in a row it won't answer! Also was setting timer
      before calling rchar() but rchar() sets timer as well!
   - Program now looks for rig driver and if it's not there then it uses
      the default freq and mode. The 'f' command is now only used to
      change the default in the default file. The %F command still changes
      the frequency if the driver is not there.
   - Added a global.defaults file which should be in directory specified
      by the environment variable LOGLIST (where the dxcc etc. lists are).
      Program now reads the global.defaults file and then the local one.
   - Put in correction for DST when calculating UTC.
   - put up warning message on startup if driver not found.
==========================================================================
V2.07 30-nov-92
   - started modifying getlist so that it will append the wae.list to
      dxcc.list and then I won't need a cqww.list. Not finished yet.
   - started modifying the dxcc.list (and cqww.list) to separate out those
      Canadian provinces which are in a CQ zone of their own. Have also
      separated Asian and European Turkey. Corrected HF0POL, it's not
      Antarctica but South Orkney, plus a few other corrections in that
      area. Eventually will also modify the CIS country entries where they
      can be split up like Canadian provinces.
   - have changed the prefix structure so that the callsign field is 12
      chars long instead of 8. This is so it can hold something like
      fr55abc/g (or worse).
   - have edited dxcc.list to bring it up to date
   - fixed bug in dxcc.list which counted 4u#un and 4u#itu as same country
   - modified log.c, getlist.c and created wae.list so that the CQWW contest
      uses the dxcc.list and a wae.list which contains only those countries
      which are NOT in the dxcc.list
   - several mods to getlist.c:
      - The * wildcard matches an alphanumeric string but NOT /
      - If a call contains a / then findcall does an initial search for an
         an exact match of that call. This allows it to find oddball calls
         like DL1KVC/P which is not a European Field Day call but Antarctica!!
         The search for the / must be done after the callsign has been
         processed so that the routine still figures out the prefix.
      - the above two mods now combine to allow the program to correctly
         distinguish between calls like Tromelin (FR*/T) and Glorioso
         (FR*/G) etc. while still handling stuff like kh6cp/1.
   - modify the ft767 driver to try doing a Ham SELect to get the info
   - Checked the dxcc.list against the ARRL list dated MAY 1992 plus added
      mods due to addition of YU4, S5, 9A and P5. Still some work to be done
      with the CIS calls.
   - fixed the qsort in getlist so that it includes all the wildcards.
   - added send and receive AREXX ports. AREXX name is VE5VA_LOGGER.
      Two commands have been added to test sending REXX stuff. The first is
      the @ command
      which sets an AREXX port name (similar to the AREXX ADDRESS command).
      Then the & command will send the string that follows to the currently
      addressed AREXX port. e.g.
      @fancydemo
      &hello there
      sends the string "HELLO THERE" to the program whose AREXX port is
      called  "FANCYDEMO" ... note that all characters are translated to
      upper case by the contest programs so you can't talk to any port that
      has lower case letters in its name (yet).
   - fixed bug in log.c, it wasn't allocating enough prefix space for SS.
   - fixed dupecheck in all programs. It wasn't using the input argument.
      All routines must pass a pointer into the in-memory log.
   - Added code for AREXX DX spotting input so that the spots are displayed
      on the screen in lower right corner. The top 5 are displayed. If a new
      one comes in, it is placed at the top and the others are pushed down.
      The display only shows the top 5 but the program actually holds up to
      50 in memory. The user can at any time choose to hit ^K to delete the
      spot at the top of the list or ^P to push the top spot onto the stack
      and ^G means to go immediately to the top spot's frequency and copy
      its callsign into the call area at the bottom of the screen.
      If an incoming DX spot is a dupe then it is thrown away.
      Should add code to highlight those spots that are also multipliers.
      Also need to have some way of handling the rig's mode which is
      currently left unchanged ... in most contests this won't matter since
      they are usually single mode.
   - Fixed error in log.c. It was calling dupecheck without having the
      callsign in the in-memory log. dupecheck always dupes from the
      in-memory log now.
   - Fixed errors in QRP scoring routine.

==========================================================================
V2.08 30-Dec-92
   - Fixed bug in ^B command which made it backup the file with a name that
      used part of the last QSO entered.
   - Modified QRP and defaults so that the 'q' default specifies either
      the ARCI or MI QRP contest.
   - Fixed bug in stopdriver which didn't DeletePort. Now running ic735 and
      doing a stopdriver does not lose any memory.
   - Fixed bug in the serial drivers for ic735 and ft767. The closeser
      routine must do both FreeMem AFTER both devices are closed.
      Also if a timeout occurs, the checkrig or sendcom routines must not
      do an AbortIO(Ser_Read) ... must let the closeser handle it.
   - Fixed ic735 so that if it is connected to a modem it won't crash.
      (It wasn't looking for a timeout in the getfreq routine).
7-Feb-93
   - Changed the file defaults so that the program first checks for the
      existence of the directories /backup and /lists and if they are there
      then they are used. Otherwise it looks for the environment variables
      LOGBACKUP and LOGLIST repectively.
   - Removed a possible bug if the input file is empty.
12-feb-93
   - Added ARLX and made it use /AM and /MM properly.
   - fixed ss. It wasn't duping properly.
21-feb-93
   - Finally figured out how to do the PTT and morse code output on the
      joystick using WritePotGo. Morse code output is now moved from RS-232
      Pin 20 (DTR) to Pin 9 on the second joystick port. PTT is Pin 5.

V3.00 21-Feb-93
==========================================================================
   - When user types space or tab in the callsign field, the remainder of
      the field must be blanked.
   - temporarily put Forbid/Permit around the code that sends a CW memory
      to prevent other processes from making the code sloppy.
   - Added PTT display. PTT of zero means don't turn on PTT line. Otherwise
      the PTT delay is in units of 10 milliseconds
   - Cyril VE5CB brought his FT767 up from Regina and finally found out how
      to talk to the stupid rig!

V3.02 6-Mar-93
==========================================================================
   - Add a SETBOTH command to the computer interface to speed up access to
      the FT767.
   - Put the cursor at end of callsign when doing a ^G with a DX spot.
   - Had to change the values returned by toasc for the cursor control keys
      so that I could also add cursor up and down change the CW speed by +/-
      2wpm.
   - Read the default files before reading the list file for the contest.
      This allows the ARLX program to determine whether its dealing with a
      DX or W/VE operator and therefore it can tell whether to read the
      dxcc.list for the W/VE or the states/provinces list for the DX op.
   - changed dupecheck in all programs to forget about trying to resolve
      calls with / in them. Will try to fix it up later.
   - Found out why qrp wasn't sending CW. The morseflag in its default was
      set to zero and the default program was not checking for illegal
      values. Accepted range is now 10 to 50.
   - Need to sort out the partial call stuff.
V3.03 25-Mar-93
==========================================================================
   - Create an IARU program. Still need to solve how to display 90 zones
      plus the HQ stations. Most of scoring done.
   - Added creation of ARRL Suggested File Format to IARU.
   - Changed log.c so that if a dupe occurs the program will still fill in
      all QSO information that it can.
   - Print dupesheets per mode/band for IARU.
   - WPX summary report printed the score per band as a short integer so
      that if it was more than 32767 it printed as a negative number. Print
      it as a long integer.
   - WPX single band entries must be rescored. Prefixes count once no matter
      which band they are worked on. If the op works other bands but only
      enters a single band then some of the prefixes scored on other bands
      would not be counted on the band being entered. So the %R command now
      does a rescore if a single band entry is required.
      It is possible that other contests need this fix too.
   - WPX modified findcall() so that calls which are similar to wu4g/5
      are counted as the prefix wu5 instead of w5.
   - RAC - several mods to make it correspond to the new exchange format.
      Also modified it so that non-Canadian ops can use the program.
   - Add default option F to allow Forbid/Permit around the CW transmission.
   - IARU Fixed up single band reporting in the arrl file output. It was
      only doing all-band.
   - FD Added arrl file output.
   - modified rexx.c so that it now checks for the proper format from a
      cluster spot.
   - modify portic etc. so that it is up to the rig's driver to ignore
      frequencies that it can't handle.
V3.04 22-jun-93 (sent to Cyril)
==========================================================================
   - modified the band table in defaults.c to add some more bands such as
      2m 70cm etc. Unfortunately, using a signed long for frequencies in
      Hertz has limited me to representing frequencies up to about 2.3Ghz.
      Will have to sort that out one day.
   - also modified the frequency display on the screen so that the frequency
      can be modified with the mouse to frequencies that the current rig
      can't handle. The rig will just ignore them.
      BUT need a way to permit the op to specify that their rig (e.g. 767)
      can handle more than just HF bands ... such as a 2m and/or 6m add-in
      board.
   - FD was not removing known dupes from the dupe list.
   - FD was not reporting a dupe if a station had been worked on a different
      mode on the same band. E.g. If w0zzz was worked on SSB and then on CW
      then further contacts on CW would not be reported as a dupe.
   - FD The VE5US FD logs showed up another bug in the dupecheck()
      routine which caused it to report a dupe when there wasn't one.
      dupecheck was using the rig_mode variable to determine the mode of the
      current QSO. But if the program has just started up and is reading the
      log, there is no valid rig_mode. It should be taken from the log entry
      itself. Turns out that the QSO mode is in the QSO line whether or not
      the program has just started and so it now uses that to determine the
      qso mode.
   - When TAB or space is hit, the routine that skips over fields was
      skipping over all lower case field types. For CQWW the zone field was
      indicated using a 'n'. I have changed this to 'Z' along with the
      editing strings for CQWW and SS.
   - IARU made the zone field 5 chars long so it can hold MRASZ from Hungary
   - dxcc.list for FO (Polynesia) was mapping into France.
   - IARU fix up problems related to having to report a HQ abbrev in the
      Tx field.
   - IARU fixed up the code that aligns the zone number.
   - IARU removed test of rig_mode and changed it to check qsop[20].
   - Removed use of rig_mode in all score() routines.
   - Checked all programs for the use of %11.11s in printf from the log.
      it blew up IARU and will blow up anything else. Fixed FD and ARLX.
V3.05 18-Jul-1993
==========================================================================
   - Modified everything so that the first line of the log is a comment
      currently containing the callsign. Later I may add other stuff that
      can change from one contest to another but which is fixed in any one
      contest.
   - Modified arlx so that it uses fd_exchange and stores this in the log.
      (Primarily so that ARLX can generate an arrl.report).
   - Fixed up some bugs in the contest programs and log.c caused by the
      comment line.
   - Added driver for Kenwood rigs. Should be able to handle most rigs
      from TS-440S and up but only tested so far on a TS-450S.
   - Added an upper and lower frequency limit to the drivers so that they
      can modify those limits if they can detect which rig is being used.
      For example, the TS450S has a range of 30kHz to 40MHz whereas the
      IC-735 has a range of 100kHz to 30MHz.
   - Added a new wildcard '.' to findcall(). It matches the end of the
      callsign string. It is used so that a call such as ka1wif will not
      match ka1!! which must be changed to ka1!!. so that they don't.
   - Changes to ITU zones in dxcc.list as per ARRL DXCC list from server.
   - Changed getlist to print out ccount+1 which is number of countries.
   - IARU and CQWW, added a routine to output a count of zones worked.
   - edit does not rescore if log is changed. rescore() is too slow when
      there's hundreds of QSOs in the log. User can request rescore with
      ^S when they have time.
   - Modify findcall so that it returns an error if the string has one char
      returns -2 to indicate a partial lookup is in order if the string has
      2 or 3 characters and is not a callsign.
   - Added a partial call lookup. A bit rudimentary at the moment but
      workable.
   - Fix log.c when the log only contains the initial comment.
   - Fix QRP SS and WPX which didn't use the right number of QSOs.
   - Fixed bug in power field. Was not trimming leading blanks and the
      array was only 5 chars .. should be 6. Field itself is 5 wide.
   - A problem with QRP not filling RST fields was due to error in log.c
      which was not skipping full fields properly.
   - Changed getlist so that if a country has more than one ITU or CQ zone
      they are stored in a list so that they can be checked.
   - IARU modified to accept -c flag which makes it check the zone in the
      input log against the dxcc.list and kicks out disagreements. This
      found a bug fixed in the next item ....
   - A call such as f/w7hj was being scored as a U.S. call. findcall() has
      been fixed so that these will find the correct country.
   - ka1!! has been removed from Japan in the dxcc.list.
   - CQWW, ARLX and IARU put ?CTY? instead of ?DUPE if it can't find a
      country in the dxcc.list
   - NAQP - started adding it in.
   - QRP - found a bug in the SPC dupe, made it 4 chars instead of 2 and
      also put this in NAQP.

Have used a very large CQWW log to do some debugging of CQWW.
   - in dxcc.list moved vp8gav to S.A., fixed (?) 4u1vic in wae.list
   - CQWW puts first 3 letters of country prefix in the multiplier column
      of the log to help identify which country it placed the callsign in.
   - fixed the way findcall handled a call like FO/callsign ... it was
      counting it as France.
Using a large WPX.
   - findcall was not generating correct prefix for calls like 9a1ed ...
      it generated 9a instead of 9a1.
   - findcall was not putting a null after the portable numeric in a US call
      and so was generating garbage on the end of the prefix.
   - fixed bug in log.c - didn't handle the comment properly and could hang.
   - CQWW moved new_country field over one to left.

   - Partial lookup has been updated and works pretty well now. It uses
      the CW memory area to display up to 20 matches.
   - Have added lots of icons from VE5CJ. Still not completely Workbench
      friendly, but better than it was.
   - Changed log.c so it does an iscall() check before the dupecheck. Saves
      it doing a dupecheck on a partial call.
   - Changed iscall so it will reject calls like nhj7h.
   - Changed findcall so that it returns -1 (instead of 0) on a failed
      iscall().
   - Above changes mean that most programs will reject a bad call now.
   - Fixed bug introduced in morse1(x).c showkeyer(). It wasn't responding
      to mouse clicks because the mode wasn't being tested properly.

This is the distributed V4.00 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   - Changed log.c so that typing a CR will not permit entry of an illegal
      callsign.
   - In CQWW and IARU, entering a partial call then a zone, followed by a
      ^I to fill in the call, and then a TAB, put the cursor at the
      beginning of the zone field. Typing CR at this point entered a zone of
      ZERO! This has been fixed. It now puts the cursor at the end of the
      entered zone, assuming that it was correct.
   - QRP was not putting the multipliers in the log.
   - QRP was not removing known dupes before doing the dupe sheets.
   - SS bug. The QSO serial numbers in the log were one too high.
   - SS now produces an arrl report.
   - The program should use Disable/Enable rather than Forbid/Permit because
      Forbid only prevents task scheduling. It does not prevent interrupts
      which will mess up the timing of the morse code output.
   - getlist .. make it look for RAC suffix in RAC contest and also make it
      set a flag if it finds a /T or /N (for ARRL 10M contest if I get it
      done)
   - Changed all programs so that they ignore a QSO whose callsign begins
      with a Q.
   - When rescoring, redisplay everything. (A deleted QSO changes all).
   - CQWW. Fix log.c so that it uses %02d instead of %2d when filling a
      zone.
   - CQWW. Several changes to the report and format of the log. Now store
      all 4 characters of the country multiplier in the log and reports
      which has the side effect of storing one digit for the score.
      Put report SENT first so that report RCVD and the multipliers are
      adjacent which makes them easier to read.
      Fix the code that checks for and counts country multipliers.
   - Fix DX spots so that program includes the frequency info after the
      decimal point.
   - When leaving an edit, call the showdx routine to redisplay DX spots
      BUT NOTE that this messes up IARU zone list! NEED TO FIX THIS.
   - Modify rexx.c so that zone and country multipliers are highlighted in
      cqww. Other programs will follow.
V4.01 uploaded to usask ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   - Added %iD and %dD to morse code memories to increment or decrement the
      current code speed by the single digit amount D. e.g.
      %i95nn%d9
      will increase current code speed by 9 wpm, send 5nn and then decrement
      the speed back down by 9wpm. Internally in the morse code sending
      routines, i and d are mapped to ( and ).
      Some of these changes have to go into morse1x.c used by IARU program.
   - Change them all so they use my modified rexxhost library routines.
   - If DEL is hit immediately after a DUPE then the whole line is deleted.
   - a backspace now deletes a whole string of spaces.
   - restructured rexx.c so that it has a list of AREXX commands and calls
      the appropriate function. At the moment there's only a DX command.
      The function returns a primary value when the REXX message is replied.
      Zero indicates OK. Non-zero indicates an error.
   - changed log.c and getlist.c so that if the contest is SS then only the
      entries in dxcc.list for K, VE and CY0/CY9 are read in by getlist.
      This removes the need for the w-ve.list file and simplifies
      maintenance of the lists.
      Similarly, if the contest is RAC then getlist only reads VE CY0 and
      CY9 from dxcc.list removing the need for the ve.list file.
   - QRP now reads in s-p.list as well as dxcc.list but need to add the code
      to make it use it.
   ^^^^ I've removed this for now because it crashes the program immediately
      The s-p.list has disappeared!
   - LABEL (in qsl directory) will now generate labels for QSOs which have a
      'P' as the 3rd last character on the line (e.g. an IARU log would end
      with  "P I"). It's a bit messy to generate this but it gets it done
      fairly easily until I work up the proper qsl program to handle the log
      directly.
V4.01 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  Sent to VE3BPR as 4.01 by mistake.
      It should have been changed in version.o to 4.02.
      The changes below will be for V4.03

   - Started adding AREXX support to the drivers. So far the programs open
      an AREXX port and can handle only "S"et and "R"ead freq/mode
      commands.

   - If there's no driver then you can't allow deffreq to become zero.

V4.03 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   - stupid error in the backup() routine in log.c  I opened the log file
      after the backup with "wb" instead of "wb+" so that the second and
      subsequent backups couldn't read anything from the main log file.
      So after the first backup, there were no more! ARRRGGHHHHH.

   - IARU didn't copy all of a previous exchange (such as MRASZ).
   - dxcc.list fixed so that it only matches ua1o for FJL - not ua1o*.
   - Modified pc so that it will not report specified bands. At the moment
      these are only specified by class (Hf, Warc, Vhf, Uhf) and only in
      a connection script. Later on I will add the ability to type in a list
      of required bands and also t osend it as an AREXX message from the
      contest programs.
   - Removed the BEEP at the end of DX spots from pc.
   - Two fixes to help WPX. First modify findcall in getlist.c so that a
      portable such as /4u will create a prefix of 4u0. Second, add the
      4u prefix to the UN entry in dxcc.list so that the prefix will be
      found and considered valid. Note. however, that this means that unless
      you put specific calls in to dxcc.list a call such as T93C/4U will
      be counted as being at UN HQ in New York instead of, in this case,
      in Haiti. 

   - fix up the way codetime was handled in curses.c so that it reads code
      somewhat better. But still need to make it handle letters like V and 6
      properly (they can come in as two separate paddle presses instead of
      one iambic squeeze like a C or L.
   - Modify initspeed to compute wordspace and charspace for the code
      reading routine. At the moment it only uses the wordspace.
   - add a -r flag to allow reading the code ... only prints it in the
      startup window at the moment.
   - modified the paddle reader/sender so that it will allow a tiny bit of
      time when sending chars like V. If you let go of the dit before
      pushing the dah then it is read as ST.
      Also, found that if "insert" was set during sending a dah it wasn't
      checking for that on the next pass round the loop so that if both
      paddles were up it just exited instead of sending the dit.
      I think the code reader/sender is in a good state now. I can send
      characters such as V / 9 etc. with no problem.
   - curses uses charspace instead of wordspace to determine when to send
      a space between chars.
   - add a couple more characters to the codemap for reading code and make
      the program write a LF when it reads a '>' in code ( .-.-. ).
   - correct the codemap - number 1 wasn't recognized!
V4.04 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

   - fix problem with timezone routine. Doesn't figure out end of DST
      correctly.

V4.05 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
