Changes for version 2.0 of qmcalc:
----------------------------------
- Better handling for points of discontinuity: nan, -inf, +inf. are processed and 
  indicated on the function graph with a small red point.
- calculator now recognized: nan, -inf, inf, +inf as valid symbols
- name of function being plotted is now shown on plotter window.
- graphs are stored in multiple data files for reference after plotting and to provide
  for graph tracing data.
- new intersection graph plotting feature in which points of intersections between two linear 
  functions are marked on the graph.
- new function tracing feature which allows for graphically tracing each plotted data
  point for each function plotted on the graph.
    - additional clicks on the trace button will put trace point at the beginning of each graph
    - clicking the clear button will exit trace mode
    - three colors to be used for function graphing: yellow, magenta and cyan
    - blue will be used for color of function trace point.
    - coordinates will appear and change on function plotter window corresponding to the 
      coordinate currently at the trace point.
    - use arrow keys to move the trace point on the function graph while in trace mode
    - PageUp/PageDown keys for moving whole number distances at a time while in trace mode
    - the enter button will toggle between end points of function graph while in trace mode    

- improved root solving algorithm to prevent occurence of failure to find root points
- bug fixed: for instruction in calculator script programming fails if increment step omitted
- clear graph button will erase graph data files from A->Z. next graph operation will plot
  data starting from graph data file A.
- found bug in menu instruction: fixed
- found bug in newton's root solving method: fixed
- new instruction dumpvars to show contents of all letter variables A->Z and ANS, ANSSTR,
  FRACANS.
- results for common angles of trig. functions shown. example: sin(pi/2), cos(pi/6)
  common angles include: pi/6, pi/3, pi/4, pi/2, pi and integer multiples of them.
  +inf and -inf for tan(pi/2) and tan(3*pi/2) shown.
- approximate points of infinity for n/x, tan(x) and inv(x) will be shown as +inf and -inf when
  plotting data points for graphs involved.
- new instruction graphallpts to set calculator to graph all points even for those points 
  approaching -inf and +inf in plot mode when this is set to true. If set to false the 
  calculator will show small red points as -inf or +inf for points approaching infinity when
  in plot mode. for example tan(pi/2) or approximate values (+/- .002) will result in +inf and
  n/0 with any value n divided by zero or (+/- .002) will result in red terminating points
  indicating discontinuity at infinite values.
- Serious bug found in number extraction procedure in long number precision mode: fixed.
- Maximum recursion level for stored string evaluation changed from 32 to 26 
  (for 26 letters: A->Z). 
- SetRecur button removed from graphical calculator panel and replaced with GraphAllPts.
- Improved error detection and handling
- Bug in function plotting methods fixed
- New calculator benchmark testing programs: newtonsmethod.prg, trigtest.prg
- More math problems for calculator testing in testcalc.in file
- Printing of the calculator window and function plotter window is now implemented.
  New "Print" button on the calculator panel.

Changes for version 2.1
-----------------------
- Improvements to statistical functions: avgmed, avgmode, min, max
  - avgmed and avgmode functions now accept file names as well as variable length argument lists
  - min and max functions now accepts the following types of arguments:
      two argument values, variable length argument list of numbers, or a file name

Changes for version 2.1.5
-------------------------
- Bug fix for digit recognition routine.

Changes for version 2.2
-----------------------
- Variable assignments now accept pasted text from the desktop environment clipboard.

Changes for version 2.3
-----------------------
- Crash when unary operators, binary operators and postfix operators are missing needed operands is fixed.
- Install script for unix systems made.
- Remove script for unix systems made.
- Changes to viewhelp.cpp documentation viewer to provide for customised build of application.
- doc directory renamed qmcalc_doc.
- README file revised.
- INSTALL file revised.

non-source code revisions:
- Revised install script to add symbolic link to Qt library if missing

Changes for version 2.4
-----------------------
- More tests in calculator input test file.
- calculator error conditions tested.
- allows for cascading assignments of +=, -=, *=, /=, @= operators for 
  assignment into variables after addition, subtraction, multiplication, division and modulus 
  respectively.
- multiple evaluated from literal strings into math formulas tested and executed successfully.
- fixed bug in missed data transfer of variable data after switching calculator types.  
- Calculator program failing correctly given infinite recursion math formula.
- fixed bug in recognizing and processing hexadecimal and octal numbers.

Changes for version 2.4.1
-------------------------
- Fixed some minor memory leak problems.
- Included libqt-mt.so.3.3.8 library in linux version which will be copied to the /usr/lib directory upon installation.

Changes for version 2.5
-----------------------
  upgraded calculator to perform set operations such as set union and intersection
    also include set operations that is valid for fuzzy logic as well as discrete logic.
    Sets will be stored in letter variables $A...$Z in string format: "{<int1>, <int2>, <int3> ...}"
    SetMode flag will be set true when performing set operations and set false when set operations
    are completed. When in set mode the numbers within the braces enclosed string "{...}" will be
    treated as set elements.

- Fixed helpviewer:
    include 1st priority search for firefox,
    include 2nd priority search for opera,
    include 3rd priority search for internet explorer
  Add pdf documentation after converting html docs with undeskpdf    

- Fixed overflow error in graphing increment intervals which made it unable to graph some functions such as: 
  GRAPH(X^3, X). Error is now fixed.

- New integer set commands available includes the following:
    Set instruction syntax:
      For making a set represented by letters A...Z
        SET(<letter>, <arg count>, <int1>, <int2>, <int3> ...)
        example:
          SET(A, 5, 1, 2, 3, 4, 5) , Set A will be created and assigned 1, 2, 3, 4, 5
                                     Set A will be returned by SET function as result

      For showing a set
        SHOWSET(<letter>)
        example:
          SHOWSET(A) , Displayed will be A = {<int1>, <int2>, <int3> ...}
     
      For making a set union
        SETUNI(<letter>, <letter>, <letter>)
        example:
          SETUNI(D, A, B) , Set D will be created and assigned union of set A and B
                            Set D will be returned by SETUNI function as result

      For making a set intersection
        SETINT(<letter>, <letter>, <letter>)
        example:
          SETINT(E, B, C) , Set E will be created and assigned intersection of set B and C
                            Set E will be returned by SETINT function as result

      For making a set difference
        SETDIF(<letter>, <letter>, <letter>)
        example:
          SETDIF(F, B, A) , Set F will be created and assigned negation of set B and A
                            Set F will be returned by SETNEG function as result

      For making a symmetric set difference
        SETXDIF(<letter>, <letter>, <letter>)
        example:
          SETXDIF(G, C, B) , Set G will be created and assigned exclusive members of Set C and B
                             Set G will be returned by SETEXC function as result

Changes for version 2.5.1
-------------------------
- Added new graphprec command which is used to adjust the graphing interval precision. This is 
  useful for speeding up function graphing by decreasing the interval precision to a lower
  value. The command syntax is: graphprec=.fv where .fv is a floating point value less than .02

- Added new version command which displays the software version number. This is displayed by
  typing "version" on the input line of the command line calculator mcalc or clicking on the new 
  About button which is put on the Qmcalc calculator form.

- Added more redistributable DLLs for the windows version of the software for cases where 
  the system requires these additional DLLs to run the graphical calculator.

- Documentation changes.

Changes for version 2.6
-----------------------
- Removed version button from GUI calculator.
  Version information can still be viewed by entering the version command
  manually and clicking the ENTER button.

- Added History button which replaces the Version button in the same location
  in the GUI form as previous versions of the calculator.
  Clicking on the History button will display a form which lists the 50 most
  recently entered calculator commands or math statements in table form.
  Beside each entry in the table is a checkbox which allows to user to select
  1 out of 50 of the most recent listed commands entered into the calculator.
  The selected command will then appear on the calculator text screen which
  will allow the user to either enter it as is for execution or modify the
  selected statement before clicking the ENTER button to execute it.

- "Help version" command now displays help documentation for version command.
  Version command will display the version number of the calculator as:

  In Text mode execution as:

    Mcalc Graphical Scientific Calculator
    Mcalc Version: x.x

  In GUI mode execution as:

    Qmcalc Graphical Scientific Calculator
    Qmcalc Version: x.x

- Modified plotting algorithm to more thoroughly check for exceptional cases
  where infinite value points are encountered that is impossible to be plotted.
  If infinite value points are encountered then the immediate previously
  adjacent high value point is plotted instead as a substitute or if this could
  not be found then the point skipped. The discontinuity encountered because of
  the infinite value point found immediately after or before the points that are
  plottable will be marked with a small red dot on the graph.

- Modified help documents search algorithm to attempt opening absolute file path
  to the default web browser as well as the help document root index file.
  This is done as an attempted alternative when the relative paths to these
  files fails to work.

- RPM package installer for qmcalc is added for the Linux version of the
  software. The RPM package installer will install Qmcalc on /usr/local/
  by default and also install shortcuts and menu items on the desktop.

Changes for version 2.7
-----------------------
- Table dialog for calculator program files and input data files to be
  entered by EXEC command.

- Description string beside each program name can be specified by inserting
  the line: "# description=" at the start of each program file or input file.

- Input data files can now be executed directly by the calculator in GUI mode.
  Versions previous to 2.7 can only use command line arguments: "-i <input file>"
  passed to the mcalc text mode version of the calculator to process batch
  input data files of the type ".in".

- When in program mode (executing a calculator script file) the calculator will
  stop recording calculator commands into the command history list and will
  only continue when program mode is exited.

- The EDIT button will now search for program/input files in multiple designated
  directories instead of only the current directory. The prglist.dat file which
  contains all default program script files and input data files will be used by
  the program file loading dialog as a last resort if no other searched directories
  are found to contain these types of files.

- Option to pause or not pause on each input line completed while executing an input
  data file can be specified with the argument "pause" or "nopause" following a comma
  after the name  of the input data file is specified as an argument to the EXEC command.

    Example: EXEC testset.in,nopause

  will specify no pausing between lines when executing the set test file: testset.in.
  The pause option is specified by default, so executing an input file with no options
  specified will pause execution of the file after each line completed.

- The STOP calculator program command will now display "<program ended>" when executed.
  This message can be customized by specifying an argument string to the STOP commamd.
  This is necessary to get the signal timing and sequence to match up correctly when
  communicating between the GUI client and the calculator server program when running
  calculator program scripts, otherwise program freezes or unexpected behavior could result.

- New DISP_PARTS calculator program command for sending text content to the output file
  in parts rather than displaying the text content one piece at a time. Using the
  DISP_PARTS command in a calculator program script will allow the user to send all text
  content data to the output file to be displayed at once when the END_DISP command is
  executed after finishing a series of DISP_PARTS commands.

- New END_DISP command to indicate end of output to the calculator after finishing the
  execution of a series of DISP_PARTS commands. Executing END_DISP will close the output
  file and notify the GUI calculator client of the new content in the output file that is
  ready for reading.

- New clear history button is added to the history table form which allows the user to
  clear the command history list of the calculator. 

- Read-only line edit is added to the history table form to provide for more clarity on
  the current command that was selected by the user. No new information is added, but
  the current command that is selected on the table will be repeated in the lined edit
  which is read-only.

- Progress bar is shown when executing a data input file with the "nopause" option to
  show the completion progress of the input file that is currently being processed.
  This progress bar will automatically close when the input file has been completely
  processed.

- Script execution results will be displayed in the program edit window with the window
  caption changed to the name of the input file processed and the resulting output file
  that is being shown.

- Implemented checks to null pointer access and potential software bugs from accessing
  deallocated or invalid memory locations.

- Fixed memory corruption errors

- Fixed calculator crash when executing DumpVars command

- Revised algorithm for calculating size and number of graph plotting subintervals to
  use when plotting function graphs

- implemented special escape characters to use when writing calculator script files
  which will reserve these characters: : ; # = &    for special purposes.
  
  To display these characters while reading from a calculator script file the following
  escape sequences must be used instead:
  &amp; or &#38;   for the ampersand character: &
  &sc; or &#59;    for the semicolon character: ;
  &hash; or &#35;  for the number sign or hash character: #
  &col; or &#58;   for the colon character: :
  &eq; or &#61;    for the equal character: =

Changes for version 2.7.1
-------------------------
- Implemented Function Validity Checker class to perform preliminary validity checks of the
  input string to the calculator for errors and inconsistencies.

- Fixed program crash bug for command line processing of calculator input files that
  contain EXEC statements for processing calculator scripts.
  Example: mcalc -i test.in

  if executed with an earlier version of the calculator will result in a crash if the
  input data file "test.in" contains an EXEC statement for processing calculator scripts.
  This bug has been fixed.

Changes for version 2.7.2
-------------------------
- Implemented text mode dialog box for showing and modifying command history
  entries while in text mode for the command line version of the calculator.
  This feature is only available for the Windows version of the calculator.

- Fixed memory corruption issues during shutdown of the calculator.

Changes for version 2.7.3
-------------------------
- Improvements and bug fixes to the Function Validity Checker module

- Documentation changes

- Added x86_64 64 bit versions for Linux and Windows

Changes for version 2.8
-----------------------
- bug fix: fixes to function validity checker
- bug fix: fixes for divide by zero errors
- new feature implemented: input batch files available for function graph commands
- new feature implemented: spinning progress counter for function graph commands
- bug fix: non-paused input batch file now works for windows 7 version
- default setting: long number precision is new default precision for calculator
- bug fix: fixes for calculator freezes and crash for function graph commands
           all function graph command types should now work correctly
- Revised algorithm for calculating size and number of graph plotting subintervals to
  use when plotting function graphs
- fixed bug with set created with duplicate set members. All sets must now have unique set members.
- Enter button disabled until operation is complete for math operations that take a long time to complete.
- pop-up message box shown for long math operations after 20 seconds have elapsed.
- miscellaneous other minor bug fixes

Changes for version 2.8.1
-------------------------
- bug fix: fixed failure to graph discontinuities for expressions with infinities or discontinuities.

