--------------------------------------
---->  IMPORTANT: run Setup.Bat <-----
--------------------------------------

Before running the demos, run the following from the Command Line:

Setup.Bat

This will copy the uCalc DLLs and headers to the proper subdirectories.  Files in the IncludeMake directory can be modified in order to auto-generate headers for compilers that aren't mentioned in the help file.

---------------------------------------------
---->  IMPORTANT: viewing uCalcFMP.chm <-----
---------------------------------------------

If the uCalcFMP.chm help file shows up blank or gives an error message, perform the following steps:

1. Right-click uCalcFMP.chm.
2. Select Properties.
3. Under the default tab (General), click the Unblock button.
4. Click the Apply button.

Note: Although Windows allows you to select files from within a zip file, you can't view or unblock the help file while it is still within the zip file.  You must unzip it first.

-------------------------------
---->  32-bit and 64-bit <-----
-------------------------------

uCalc FMP comes with DLLs for use with 32-bit and 64-bit applications.  However, the current 64-bit DLL is a provisional one.  It is implemented as a separate process that calls the 32-bit DLL using IPC (you don't need to worry about any of these details for it to work).  As such, instead of being even faster than the 32-bit version, it is actually slower, and takes up more memory.  It does not take advantage of special properties of being a 64-bit DLL.  It also has limitations and quirks.  For instance, it cannot handle error handling callbacks.  And for function callbacks, you must use only the native option (which is actually the preferred option even in 32-bit).  Please note that some examples in the demo (the same one is used for 32-bit and 64-bit) feature the error handling callback and nonnative callback functions; those should be avoided when you run the demo.  If you shut down your app abruptly instead of normally, the 64-bit DLL process will remain in memory.  The main purpose of this implementation is to allow you to be able to use most of uCalc FMP's functionality in your 64-bit apps right now, as a new 64-bit DLL is rewritten from the ground up to make full use of 64-bit benefits.

IMPORTANT: There is a different set of include files for use with 64-bit applications.  These include files contain "x64" in the file name.  Be sure to use those instead.  For instance, to compile a 64-bit application with C#, use uCalcCSx64.cs instead of uCalcCS.cs (that one is for 32-bit apps only). 


------------------------
---->  What's new <-----
------------------------

What's new in version 4.0
* ucGetVariableValue(), which retrieves the numeric value of a floating point variable was added.  There had been one for integers and strings, but this one was missing.

Parsing related
 - [[...]] can be used instead of [...] to make optional syntax parameters be considered after instead of before
 - Fix: SyntaxArg can have ~~ in it without problem
 - Fix: The parser is more stable; certain scenarios that would a crash no longer do

What's new in version 3.99
Nothing directly related to FMP.  The parser, which is shared with other uCalc products, was improved.

What's new in version 3.98
* FIX: In the previous version, the 64-bit DLL process remained in memory even after a 64-bit application using this DLL was closed.  This was fixed.
* There are other minor enhancements that pertain to parsing in the context of calls from uCalc Transform.

What's new in version 3.96
* The C++ help file topic was updated
* Additional VC++ demo programs were added (for Console, and MFC)
* Most other improvements are related to uCalc String Library routines, which are also accessible from FMP

What's new in version 3.95
The 64-bit provisional DLL was restored.  See further down for additional functionality added to the 64-bit version.


Visit www.ucalc.com for more product information

What's new in version 3.8

uCalc patterns:
---------------
(Accessible by all uCalc FMP)

NEW: {@If: ...} - Conditional pattern match
NEW: {@Skip: ...} - can be used in same pattern; No longer requires separate def
NEW: {Self} does not automatically set the PassOnce property to True
NEW: {@Execute: ... } which is similar to {@Exec: ...} but faster


uCalc String Lib
----------------
(Accessible by all uCalc FMP)
NEW: ucReplace() can now perform multiple search/replace operations with the same pattern
Fix: Memory corruption problem when used with uCalc Transform


uCalc Fast Math Parser
----------------------
NEW: Not operator
Fix: Ambiguity between ++ and -- increment/decrement ops and successive + and - ops
Fix: Include files for VC++ w/ MFC and Delphi

Note: The 64-bit provisional DLL did not make it in this round.  Please use FMP 3.8's DLL for until next time if you need 64 bit.



---------------------------------------------
---->  Regarding the 64-bit version <-----
---------------------------------------------

NEW with v3.95
- Function callbacks
- Multiple programs that call the 64 bit DLL can run concurrently with no problem

NEW with v3.8 - Functions that return a string can now be used in FMP 64-bit.

The 64-bit and 32-bit versions are designed to work the same way.

The current 64-bit DLL is a provisional solution that uses IPC to communicate
with the 32-bit DLL that contains the actual core of uCalc FMP.  Eventually
the entire code will be ported over so that the 64 bit DLL does not depend
on a 32-bit DLL.  The main purpose of this provisional solution is to allow
you to use uCalc FMP with 64 bit applications right now, even as work
continues towards the release of the full-fledged 64-bit DLL at a later date.
As such this solution does not take advantage of special 64-bit features.
The extra overhead consumes more memory, more CPU, and is slower.  Also, because
this solution requires more than one process (32 bit & 64 bit), if your 64-bit
application is not shut down correctly it may leave behind the 32-bit process
which may continue to occupy memory and use CPU cycles..

IMPORTANT: If you want to run the demo in 64-bit mode, remove the 32-bit uCalc
           header from the project, and add the 64-bit header instead (for
           instance use uCalcCSx64.cs instead of uCalcCS.cs in C#).  Also,
           make sure to copy all the DLLs to the 64 bit folder for your project.

Purchasing the 64-bit version at this stage will greatly help accelerate the
pace of development of subsequent 64-bit versions, eventually leading up to
the full fledged 64-bit DLL.

This IPC solution is made possible by the new uCalc Transform product.
Transforms were created, which auto-generated the necessary add-on IPC code
for the 32-bit DLL as well as source code in a different programming language,
which was then compiled as a separate 64 bit DLL.  Attempting to do this
manually would have been tedious, prohibitively time-consuming, prone to
manual error, and it would have been difficult to keep it in sync with
constant changes to the original source code.  Check out uCalc Transform; you
will likely find it very useful as well.

To participate in the PB to C++ open source - source code conversion project,
which will allow uCalc to be recompiled into a full-fledged 64-bit DLL, please
visit http://github.com/uCalc/powerbasic-to-cpp .