--------------------------------------------------
                         VFP C++ COMPILER CHANGES HISTORY
                                 January 2024
                 --------------------------------------------------
                 (C)SHENZHEN BAIYUJIA SOFTWARE TECHNOLOGY CO., LTD.



**************************************************
2024/4/9

Bugs Fixed:

    1, Fixed some bugs for COM server programs and the compile option /VCMULTITASK=ON|OFF Multi-Task Compile Mode.


**************************************************
2024/3/24

Bugs Fixed:

    1, SET ORDER TO tagexp statement, the expanded tagexp is too long problem.
    2, Fixed some bugs for the compile option /VCFASTDECOMPDOCASE=ON|OFF Fast Decompose DO CASE Statement.


**************************************************
2023/12/18

VFP C++ Compiler 2023 RELEASE.


**************************************************
2023/12/12

New Features:

    1, /VCLOWERCASEFILENAME=ON|OFF Lowercase File Name

--------------------------------------
   VFP C++ Compiler Update 20231212
--------------------------------------

1, /VCLOWERCASEFILENAME=ON|OFF Lowercase File Name

The default is ON, VFP C++ Compiler saves lowercase file name in the the executable file.
If set to OFF, VFP C++ Compiler saves uppercase file name in the the executable file.

In the VFP C++ Compiler old version,
there are some problems about uppercase file name in Spanish.

In the VFP C++ Compiler new version,
if we set /VCLOWERCASEFILENAME=ON (the default setting),
there is no problem about file name in Spanish.


**************************************************
2023/12/11

Bugs Fixed:

    1, Preprocessor directives problem.

--------------------------------------
   VFP C++ Compiler Update 20231211
--------------------------------------

1, Preprocessor directives problem.

The VFP C++ Compiler old version can only process the preprocessor directives without space, for example,
#INCLUDE vctest.h
#DEFINE XX2 "Y"
it can't process the preprocessor directives with spaces or tabs, for example,
# INCLUDE vctest.h
#  DEFINE XX2 "Y"

The VFP C++ Compiler new version can process the preprocessor directives without space
and the preprocessor directives with spaces or tabs, for example,
#INCLUDE vctest.h
#DEFINE XX2 "Y"
# INCLUDE vctest.h
#  DEFINE XX2 "Y"

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2023/11/25

Bugs Fixed:

    1, File names containing multiple contiguous spaces of the Picture property problem.
    2, The RelationalExpr property in class definition problem.
    3, #DEFINE preprocessor directive compilation speed optimization.
    4, DIMENSION statement syntax error problem.
    5, FOR EACH ... ENDFOR statement problem.

--------------------------------------
   VFP C++ Compiler Update 20231125
--------------------------------------

1, File names containing multiple contiguous spaces of the Picture property problem.

For example,
Picture = fox     abc.bmp

There are 5 spaces in the file name,
the old VFP C++ Compiler will compress the 5 spaces to 1 space,
it will be converted to:
Picture = fox abc.bmp
then vfp will get wrong Picture property.

The VFP C++ Compiler new version has fixed the bug for the following *Picture / *Icon properties:
DisabledPicture
DownPicture
OLEDragPicture
Picture
DragIcon
Icon
MouseIcon

2, The RelationalExpr property in class definition problem.

For example,
Add Object Relation1 As Relation With ;
ParentAlias = "Table_Parent",;
RelationalExpr = "field1+field2",;
ChildAlias = "Table_Child",;
ChildOrder = "MainOrder"

In the old VFP C++ Compiler,
it will display an error: RelationalExpr Expression Error or Unknown.

The VFP C++ Compiler new version has fixed the bug.

3, #DEFINE preprocessor directive compilation speed optimization.

For example, for the code:
#IF XX1
#DEFINE XX2 "Y"
#ELSE
#DEFINE XX2 "N"
#ENDIF

the const name XX2 has been defined 2 (or more) times,
VFP C++ Compiler will take more time to process the const name XX2,
so VFP C++ Compiler will run slow.

I did some changes in the VFP C++ Compiler new version.

If a const name is defined many times, and they are defined the same value, for example,
#DEFINE XX2 "Y"
#DEFINE XX2 "Y"
VFP C++ Compiler will process these #DEFINE preprocessor directives very fast.

If a const name is defined many times, and they are not defined the same value, for example,
#IF XX1
#DEFINE XX2 "Y"
#ELSE
#DEFINE XX2 "N"
#ENDIF
VFP C++ Compiler will process these #DEFINE preprocessor directives slow.

4, DIMENSION statement syntax error problem.

In VFP9, for example, the code:
DIMENSION aFiles(1) = "Default_Item"
will be compiled to:
DIMENSION aFiles(1)
so there is no error for the compiled fxp/app/exe files.

In the VFP C++ Compiler old version, for example, the code:
DIMENSION aFiles(1) = "Default_Item"
will be converted to:
DIMENSION ("aFiles(1)") = "Default_Item"
so there is an error for the compiled fxp/app/exe files.

In the VFP C++ Compiler new version, for example, the code:
DIMENSION aFiles(1) = "Default_Item"
will be converted to:
DIMENSION ("aFiles(1)")
so there is no error for the compiled fxp/app/exe files,
and VFP C++ Compiler will display the compilation error messages:
DIMENSION Syntax Error: DIMENSION aFiles(1) = "Default_Item"
and write the error message to the error log (.err) file.

The VFP C++ Compiler new version has fixed the bug for the following statements:
PUBLIC | PRIVATE | LOCAL | DIMENSION | DECLARE [ARRAY] Syntax Error.

5, FOR EACH ... ENDFOR statement problem.

For example,
FOR n1=1 TO 130
   ?n1
   LOCAL lcComputerName, loWMIService, loItems, loItem
   lcComputerName = "."
   loWMIService = GETOBJECT("winmgmts:\\" + lcComputerName + "\root\cimv2")
   loItems = loWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
   FOR EACH loItem IN loItems
      ?loItem.name
   ENDFOR
ENDFOR

_FreeObject() API Library Routine (form the vfp help file DV_FOXHELP9.CHM):
If an object reference is returned from any Visual FoxPro API function,
for example, _Evaluate() or _GetObjectProperty(),
you must use _FreeObject() to release the object when you are no longer using it.

In the old VFP C++ Compiler,
it will create a backup object of the group object,
and then it will call the _Evaluate() function to evaluate the backup object,
but it will not call the _FreeObject() function to free the backup object,
and the maximum number of objects in an API Library is 128,
so it will cause an error:
There is not enough memory to complete this operation (Error 43).

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2023/3/6

New Features:

    1, /VCRUNTIMELIBRARYFILETYPE=n File Type of the VC Runtime Library (only support Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20230306
--------------------------------------

1, /VCRUNTIMELIBRARYFILETYPE=n File Type of the VC Runtime Library (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the file type of the VC runtime library
of the compiled executable files:
     -2 - The VC runtime library file is MSVCR70.DLL
     -1 - The VC runtime library file is MSVCR71.DLL
     0 - The VC runtime library file is MSVCR100.DLL
     1 - The VC runtime library file is MSVCR10064.DLL
     2 - The VC runtime library file is MSVCRA64.DLL

If we set /VCRUNTIMELIBRARYFILETYPE=2,
we can save the 32-bit executable files and the 64-bit executable files in the same folder, for example,
     MYAPP.EXE      && the 32-bit executable file
     MYAPP.DLL      && the 32-bit dynamic link library file
     MSVCR100.DLL   && the 32-bit Visual C++ Runtime Library
     VFPAR.DLL      && the 32-bit VFP Advanced Runtime Library
     MYAPP64.EXE    && the 64-bit executable file
     MYAPP64.DLL    && the 64-bit dynamic link library file
     MSVCRA64.DLL   && the 64-bit Visual C++ Runtime Library
     VFPAR64.DLL    && the 64-bit VFP Advanced Runtime Library


**************************************************
2023/2/26

Bugs Fixed:

    1, DEFINE CLASS ... OF ... statement problem.

--------------------------------------
   VFP C++ Compiler Update 20230226
--------------------------------------

1, DEFINE CLASS ... OF ... statement problem.

For example,
DEFINE CLASS custom_vctest2 AS custom_vctest OF mylib.vcx
ENDDEFINE

For the old VFP C++ Compiler,
it will create 2 names custom_vctest2 and custom_vctest:mylib.vcx in the name table index,
and then it will display an error message "Create the global name table index failed".

For the new VFP C++ Compiler,
it will create 2 names custom_vctest2 and custom_vctest in the name table index,
and then it will run fine.


**************************************************
2023/2/12

New Features:

    1, Support for all versions of Visual C++ 14.3 (Visual Studio 2022).

--------------------------------------
   VFP C++ Compiler Update 20230212
--------------------------------------

Now VFP C++ Compiler can support for all versions of Visual C++ 14.3 (Visual Studio 2022).
For the history of Visual C++ 14.3 (Visual Studio 2022), please refer to:
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.3
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.2
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.1
https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes-v17.0


**************************************************
2023/2/1

New Features:

    1, /VCADDPROC=ON|OFF Load Additional Procedure Files
       /VCADDPROCLIST=... Additional Procedure Files List

--------------------------------------
   VFP C++ Compiler Update 20230201
--------------------------------------

For example,
SET PROCEDURE TO ("myaddproc.fxp") ADDITIVE
USE VCTEST.DBF EXCLUSIVE
INDEX ON myfunc(vexp) TAG vexp
So, we must load the procedure file myaddproc.fxp first,
and then we can open the table file vctest.dbf.

In the old VFP C++ Compiler,
it will not load the procedure file myaddproc.fxp,
so it will cause an error: Open Table File Error.

In the new VFP C++ Compiler,
we can set:
/VCADDPROC=ON
/VCADDPROCLIST=myaddproc.fxp
so it will load the procedure file myaddproc.fxp first,
so it can run fine.


**************************************************
2023/1/30

Bugs Fixed:

    1, Fixed some bugs for some commands about clear the compiled program buffer automatically.

--------------------------------------
   VFP C++ Compiler Update 20230130
--------------------------------------

Usually, the following commands will clear the compiled program buffer automatically:
Activate another application, when Visual FoxPro is running in interactive mode (in the command window)
CLEAR PROGRAM command
DOEVENTS command
MODIFY COMMAND command and MODIFY FILE command, specify the name of the text editor (TEDIT = [/N] editor)
in the configuration file
RUN or ! command, when Visual FoxPro is not running in a VFP API Library routine
SET DEVELOPMENT ON command
CHDIR (or CD) command and SET DEFAULT command, when Visual FoxPro Advanced is not running
in a VFP API Library routine

In the old VFP C++ Compiler, sometimes there are some problems for the following commands:
MODIFY COMMAND command and MODIFY FILE command, specify the name of the text editor (TEDIT = [/N] editor)
in the configuration file

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/12/10

VFP C++ Compiler 2022 RELEASE.


**************************************************
2022/10/30

New Features:

    1, /VCNOTDISPLAY_COMPILEERROR=ON|OFF Does Not Display Compilation Error Messages

--------------------------------------
   VFP C++ Compiler Update 20221030
--------------------------------------

1, /VCNOTDISPLAY_COMPILEERROR=ON|OFF Does Not Display Compilation Error Messages

The default is OFF, VFP C++ Compiler displays compilation error messages.
If set to ON, VFP C++ Compiler does not display compilation error messages.

In the old VFP C++ Compiler,
if there are some compilation errors,
VFP C++ Compiler saves compilation error messages to the error log (.err) file.

In the new VFP C++ Compiler,
if there are some compilation errors,
VFP C++ Compiler saves compilation error messages to the error log (.err) file,
and displays compilation error messages.


**************************************************
2022/9/25

Bugs Fixed:

    1, Fixed some bugs for COM server programs and the compile options /VCNAMEMULTIPROJ=ON|OFF
Compile Variable Names for Multiple Projects.

--------------------------------------
   VFP C++ Compiler Update 20220925
--------------------------------------

In the old VFP C++ Compiler,
for COM server programs,
we can not select the compile options /VCNAMEMULTIPROJ=ON|OFF Compile Variable Names for Multiple Projects.

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/9/12

New Features:

    1, /VCNEWNAMEMODE=n Create the Name Table Index Mode (only support Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20220912
--------------------------------------

1, /VCNEWNAMEMODE=n Create the Name Table Index Mode (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the Create the Name Table Index Mode:
     0 - Old Mode to Create the Name Table Index
     1 - New Mode to Create the Name Table Index
     2 - Auto Mode to Create the Name Table Index


**************************************************
2022/9/10

Bugs Fixed:

    1, Fixed some bugs for Access or Assign methods.

--------------------------------------
   VFP C++ Compiler Update 20220910
--------------------------------------

In the old VFP C++ Compiler,
sometimes there are some problems for Access or Assign methods.

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/8/24

New Features:

    1, /VCSTEP_ONERROR=ON|OFF Single Step Compile On Error Code
    2, /VCSTEP_ONESCAPE=ON|OFF Single Step Compile On Escape Code


**************************************************
2022/6/16

Bugs Fixed:

    1, Fixed some bugs for the compile options /VCENCRYPTPCODE=ON|OFF Encrypt P-Code
and /VCFASTENCRYPTPCODE=ON|OFF Fast Encrypt P-Code.

--------------------------------------
   VFP C++ Compiler Update 20220616
--------------------------------------

For example,

PUBLIC m.p_count
m.p_count=1

IF TYPE("_SCREEN.custom_vctest1")="O"
   _SCREEN.REMOVEOBJECT("custom_vctest1")
ENDI
_SCREEN.ADDOBJECT("custom_vctest1","custom_vctest")

_SCREEN.custom_vctest1.method1()

RETU

DEFINE CLASS custom_vctest AS CUSTOM

property1=0

FUNCTION method1

IF m.p_count<=5
   m.p_count=m.p_count+1
   THIS.method1()
ENDIF

THIS.property1=SECOND()

RETU

FUNCTION property1_assign

LPARAMETERS tnvalue

THIS.property1=tnvalue
THIS.method1()

RETU

ENDDEFINE

When vfp runnig the statement "THIS.property1=SECOND()",
it will run the property1_assign() method,
and then it will run into the method1() method again,
and then it will run the statement "THIS.property1=SECOND()" again...
This is a recursive routine.

In the old VFP C++ Compiler,
for some recursion code in property_access or property_assign methods,
there are some bugs for the compile options /VCENCRYPTPCODE=ON|OFF Encrypt P-Code
and /VCFASTENCRYPTPCODE=ON|OFF Fast Encrypt P-Code.

The VFP C++ Compiler new version has fixed the bug.


**************************************************
2022/5/18

New Features:

    1, /VCANTIDECOMPILE=ON|OFF Anti-Decompile


**************************************************
2022/4/7

New Features:

    1, Automatic use "Single Step Compile Mode" to compile the statements between
ON ESCAPE command and ON ESCAPE.

--------------------------------------
   VFP C++ Compiler Update 20220407
--------------------------------------

1, Automatic use "Single Step Compile Mode" to compile the statements between
ON ESCAPE command and ON ESCAPE.

For example,

cancelado = .f.
SET ESCAPE ON
ON ESCAPE cancelado = .t.
numeroDato=1
totalDato=100000
WAIT CLEAR
DO WHILE numeroDato<=100000
   IF cancelado
      IF messagebox("Do you want to cancel the process?","Cancel.",4+32+256) = 6
         EXIT
      ELSE
         cancelado = .f.
      ENDIF
   ENDIF
   WAIT WINDOW NOWAIT ALLTRIM(STR(numeroDato/1000))+"%. Press ESC to cancel the process."
   numeroDato=numeroDato+1
ENDDO
SET ESCAPE off
ON ESCAPE

For the older version,
it will compile the vfp code:

numeroDato=1
totalDato=100000
WAIT CLEAR
DO WHILE numeroDato<=100000
   IF cancelado
      IF messagebox("Do you want to cancel the process?","Cancel.",4+32+256) = 6
         EXIT
      ELSE
         cancelado = .f.
      ENDIF
   ENDIF
   WAIT WINDOW NOWAIT ALLTRIM(STR(numeroDato/1000))+"%. Press ESC to cancel the process."
   numeroDato=numeroDato+1
ENDDO

to one C funciton __VC_TEST_xxx().

It will run all code in the C funciton __VC_TEST_xxx(),
and then check the ESC key,
and then call the ON ESCAPE handling (run the code: cancelado = .t.).

The new VFP C++ Compiler will automatic compile the vfp code between:

ON ESCAPE xxx
...
...
...
ON ESCAPE (or ON ESCAPE *, or ON ESCAPE &xxx)

as "Single Step Compile Mode":

ON ESCAPE cancelado = .t.
__VC_TEST_A(1)
__VC_TEST_A(2)
__VC_TEST_A(3)
DO WHILE __VC_TEST_A(4)
IF __VC_TEST_A(5)
IF __VC_TEST_A(6)
EXIT
ELSE
__VC_TEST_A(7)
ENDIF
ENDIF
__VC_TEST_A(8)
__VC_TEST_A(9)
ENDDO
__VC_TEST_A(10)
ON ESCAPE

then it can run fine.


**************************************************
2021/12/24

VFP C++ Compiler 2021 RELEASE.


**************************************************
2021/12/16

Bugs Fixed:

    1, Fixed some bugs for the SYS(17) function.

--------------------------------------
   VFP C++ Compiler Update 20211216
--------------------------------------

For the following code:
#IF SYS(17) = "X64"
?"VFP Advanced 64-bit version"
#ELSE
?"VFP Advanced 32-bit version"
#ENDIF

When the old VFP C++ Compiler 32-bit compiled and generated the Win32 executable file,
and then run the Win32 executable file, it will display "VFP Advanced 32-bit version",
it is correct.

When the old VFP C++ Compiler 64-bit compiled and generated the Win64 executable file,
and then run the Win64 executable file, it will display "VFP Advanced 64-bit version".
it is correct.

When the old VFP C++ Compiler 32-bit compiled and generated the Win64 executable file,
and then run the Win64 executable file, it will display "VFP Advanced 32-bit version",
it is incorrect.

When the old VFP C++ Compiler 64-bit compiled and generated the Win32 executable file,
and then run the Win32 executable file, it will display "VFP Advanced 64-bit version".
it is incorrect.

The VFP C++ Compiler new version has fixed the bug.

For the following code:
IF SYS(17) = "X64"
?"VFP Advanced 64-bit version"
ELSE
?"VFP Advanced 32-bit version"
ENDIF

The compiled executable file will call the SYS(17) function at runtime instead of compile time,
so there is no the bug in the VFP C++ Compiler old version.

The the _WIN64 system variable can only be used at runtime, it can not be used at compile time,
so there is no the bug for the the _WIN64 system variable.


**************************************************
2021/3/1

Bugs Fixed:

    1, DEFINE BAR ... SKIP FOR condition statement, the expanded condition is too long problem.


**************************************************
2021/1/26

New Features:

    1, Support for all versions of Visual C++ 14.2 (Visual Studio 2019).

--------------------------------------
   VFP C++ Compiler Update 20210126
--------------------------------------

Now VFP C++ Compiler can support for all versions of Visual C++ 14.2 (Visual Studio 2019).
For the history of Visual C++ 14.2 (Visual Studio 2019), please refer to:
https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes-history
    Visual Studio 2019 version 16.7 Release Notes
    Visual Studio 2019 version 16.6 Release Notes
    Visual Studio 2019 version 16.5 Release Notes
    Visual Studio 2019 version 16.4 Release Notes
    Visual Studio 2019 version 16.3 Release Notes
    Visual Studio 2019 version 16.2 Release Notes
    Visual Studio 2019 version 16.1 Release Notes
    Visual Studio 2019 version 16.0 Release Notes


**************************************************
2020/12/24

VFP C++ Compiler 2020 RELEASE.


**************************************************
2020/10/14

New Features:

    1, /VFPLIBVERSION=... VFP Support Library Version (only support Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20201014
--------------------------------------

1, /VFPLIBVERSION=... VFP Support Library Version (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select VFP Support Library Version:
     AUTO - The VFP Support Library Version is the same as the VFP Run File Version
     10.0 - The VFP Support Library Version is 10.0 Version
     10.1 - The VFP Support Library Version is 10.1 Version


**************************************************
2020/10/6

New Features:

    1, /VCDPIAWARENESSMODE=n DPI Awareness Mode (only support Visual FoxPro Advanced)
    2, /VCREQUESTEXECUTIONLEVEL=n Request Execution Level (only support Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20201006
--------------------------------------

1, /VCDPIAWARENESSMODE=n DPI Awareness Mode (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the DPI awareness mode of the compiled
executable files:
     -1 - No DPI Awareness Mode
     0 - DPI Unaware Mode
     1 - DPI System Aware Mode
     2 - DPI Per Monitor Aware Mode
     3 - DPI Per Monitor V2 Aware Mode

2, /VCREQUESTEXECUTIONLEVEL=n Request Execution Level (only support Visual FoxPro Advanced)

     For Visual FoxPro Advanced, we can select the Request Execution Level of the compiled
executable files:
     -1 - No Requesting Execution Level
     0 - No Additional Permissions
     1 - The Highest Permissions Available
     2 - Full Administrator Permissions


**************************************************
2020/9/6

New Features:

    1, /VCMULTITASK_COMPILEFORM=ON|OFF Multi-Task Compile the Large Form File
       /VCMULTITASKNUMBER_COMPILEFORM=n Multi-Task Number for Compiling the Large Form File
       /VCMULTITASK_COMPILEDLL=ON|OFF Multi-Task Compile the DLL Source Files
       /VCMULTITASKNUMBER_COMPILEDLL=n Multi-Task Number for Compiling the DLL Source Files

--------------------------------------
   VFP C++ Compiler Update 20200906
--------------------------------------

1, /VCMULTITASK_COMPILEFORM=ON|OFF Multi-Task Compile the Large Form File
   /VCMULTITASKNUMBER_COMPILEFORM=n Multi-Task Number for Compiling the Large Form File

VFP C++ Compiler generates a large form file which contains all code in the VFP project file,
sometimes the size of the large form file is great than 100 MB,
and it takes more than 10 minutes to compile the large form file.

Recommend to set the following compile options for multi-core or multi-thread CPU:
/VCMULTITASK_COMPILEFORM=ON Multi-Task Compile the Large Form File
/VCMULTITASKNUMBER_COMPILEFORM=4 Multi-Task Number for Compiling the Large Form File
then VFP C++ Compiler can compile faster.

If we set:
/VCMULTITASK=ON Multi-Task Compile Mode
VFP C++ Compiler will run multi-task to compile the large form file automatically.

2, /VCMULTITASK_COMPILEDLL=ON|OFF Multi-Task Compile the DLL Source Files
   /VCMULTITASKNUMBER_COMPILEDLL=n Multi-Task Number for Compiling the DLL Source Files

VFP C++ Compiler generates many C/C++ files (foxrun*.c),
sometimes the size of the C/C++ files are great than 100 MB,
and it takes more than 10 minutes to compile the C/C++ files.

Recommend to set the following compile options for multi-core or multi-thread CPU:
/VCMULTITASK_COMPILEDLL=ON Multi-Task Compile the DLL Source Files
/VCMULTITASKNUMBER_COMPILEDLL=4 Multi-Task Number for Compiling the DLL Source Files
then VFP C++ Compiler can compile faster.

If we set:
/VCMULTITASK=ON Multi-Task Compile Mode
VFP C++ Compiler will run multi-task to compile the DLL source files automatically.


**************************************************
2020/8/16

Bugs Fixed:

    1, Fixed some bugs for COM server programs.
    2, Fixed some bugs for the compile option /APPDEBUG=ON|OFF Application Debug Mode.

--------------------------------------
   VFP C++ Compiler Update 20200816
--------------------------------------

1, Fixed some bugs for COM server programs.

If the COM server program is small, there is no problem in the VFP C++ Compiler old version.
If the COM server program is bigger, there are some bugs in the VFP C++ Compiler old version.

The VFP C++ Compiler new version has fixed the bug.

2, Fixed some bugs for the compile option /APPDEBUG=ON|OFF Application Debug Mode.

The VFP C++ Compiler old version only creates an 'after' application debug log:
<VFP statement>
after_log

Usually, for almost VFP statements,
the VFP C++ Compiler new version creates 2 application debug logs:
before_log
<VFP statement>
after_log

VFP C++ Compiler does NOT create an application debug log for the following statements:
TEXT ... ENDTEXT
properties in DEFINE CLASS ... ENDDEFINE (between endfunc/endproc and Function/proc)
PROCEDURE 
FUNCTION 
PROTECTED 
HIDDEN 
PARAMETERS 
LPARAMETERS 
ENDDEFINE
Preprocessor Directives (starts with #)

VFP C++ Compiler only creates an 'after' application debug log for the following statements:
ELSE
CASE
OTHERWISE
CATCH
FINALLY

<VFP statement>
after_log

VFP C++ Compiler only creates a 'before' application debug log for the following statements:
DO CASE
LOOP
EXIT
THROW
RETURN
ENDxxx (except ENDDEFINE)

before_log
<VFP statement>


**************************************************
2020/8/1

New Features:

    1, /VCNOTCOMPILEFILELIST=... Does Not Compile Files List

--------------------------------------
   VFP C++ Compiler Update 20200801
--------------------------------------

1, /VCNOTCOMPILEFILELIST=... Does Not Compile Files List

Now we can set the does not compile files list, for example,
/VCNOTCOMPILEFILELIST=FORMS\*.SCX,LIBS\*.VCX


**************************************************
2020/6/20

New Features:

    1, Support for multiple-instances of VFP C++ Compiler.

--------------------------------------
   VFP C++ Compiler Update 20200620
--------------------------------------

In the old VFP C++ Compiler,
we can only run single-instance of VFP C++ Compiler.

If we want to compile many projects, we can create a batch file compileall.bat, for example,
START /W "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG1\PROG1.VCF" /SILENT=ON
START /W "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG2\PROG2.VCF" /SILENT=ON
START /W "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG3\PROG3.VCF" /SILENT=ON
when we running the batch file compileall.bat,
it will compile the 1st project, and the 2nd project, and the 3rd project.

In the new VFP C++ Compiler,
we can run multiple-instances of VFP C++ Compiler.

If we want to compile many projects, we can create a batch file compileall.bat, for example,
START "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG1\PROG1.VCF" /SILENT=ON
START "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG2\PROG2.VCF" /SILENT=ON
START "C:\Program Files\Baiyujia VFP C++ Compiler\VC.EXE" "D:\PROG3\PROG3.VCF" /SILENT=ON
when we running the batch file compileall.bat,
it will run 3 instances of VFP C++ Compiler,
they will compile the 3 projects at the same time.


**************************************************
2020/3/30

New Features:

    1, /VCADDFLL=ON|OFF Load Additional VFP API Library Files
       /VCADDFLLLIST=... Additional VFP API Library Files List

--------------------------------------
   VFP C++ Compiler Update 20200330
--------------------------------------

For example,
SET LIBRARY TO ("FOXTOOLS.FLL") ADDITIVE
USE VCTEST.DBF EXCLUSIVE
INDEX ON WORDS(vexp) TAG WORDS
So, we must load the VFP API library file foxtools.fll first,
and then we can open the table file vctest.dbf.

In the old VFP C++ Compiler,
it will not load the VFP API library file foxtools.fll,
so it will cause an error: Open Table File Error.

In the new VFP C++ Compiler,
we can set:
/VCADDFLL=ON
/VCADDFLLLIST=FOXTOOLS.FLL
so it will load the VFP API library file foxtools.fll first,
so it can run fine.


**************************************************
2019/12/30

VFP C++ Compiler 2019 RELEASE.


**************************************************
2019/11/6

New Features:

    1, /VCOUTPUTEXE=... Output Executable File
    2, /VCOUTPUTDLL=... Output Dynamic Link Library File


**************************************************
2019/9/29

Bugs Fixed:

    1, Support VFP encrypted applications (only support Visual FoxPro Advanced).


**************************************************
2019/9/26

Bugs Fixed:

    1, FOR EACH ... IN collection statement, but there is no element in collection problem.


**************************************************
2019/7/2

New Features:

    1, Support for COM server programs with the "Include VFP Support Library" compile option.


**************************************************
2019/5/28

New Features:

    1, /SILENTDISPLAY=ON|OFF Silent Display Mode


**************************************************
2019/5/25

New Features:

    1, Support for version information in the dynamic link library file.

--------------------------------------
   VFP C++ Compiler Update 20190525
--------------------------------------

Usually, we can create the version information file FOXRUN\RSRCDLL\RSRCDLL.RC in the project folder,
then when VFP C++ Compiler build the dynamic link library file,
the version information file will be embedded into the dynamic link library file automatically.

For example, we can create the version information file such as:
/////////////////////////////////////////////////////////////////////////////
//
// Version
//

1 VERSIONINFO
 FILEVERSION 10,0,0,0
 PRODUCTVERSION 10,0,0,0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x2bL
#else
 FILEFLAGS 0x2aL
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "\0"
            VALUE "CompanyName", "SHENZHEN BAIYUJIA SOFTWARE TECHNOLOGY CO., LTD.\0"
            VALUE "FileDescription", "VFP C++ Compiler for Windows\0"
            VALUE "FileVersion", "10.0.0.0\0"
            VALUE "InternalName", "VC\0"
            VALUE "LegalCopyright", "(C)SHENZHEN BAIYUJIA SOFTWARE TECHNOLOGY CO., LTD., 2000-2019.\0"
            VALUE "LegalTrademarks", "\0"
            VALUE "OleSelfRegister", "\0"
            VALUE "OriginalFilename", "VC\0"
            VALUE "PrivateBuild", "\0"
            VALUE "ProductName", "VFP C++ Compiler\0"
            VALUE "ProductVersion", "10.0.0.0\0"
            VALUE "SpecialBuild", "\0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

If there is the version information in the project file,
VFP C++ Compiler will update the following version number in the version information file automatically:
FILEVERSION 10,0,0,0
PRODUCTVERSION 10,0,0,0
VALUE "FileVersion", "10.0.0.0\0"
VALUE "ProductVersion", "10.0.0.0\0"
then the version number in the executable file is the same version number in the dynamic link library file.


**************************************************
2019/2/18

Bugs Fixed:

    1, Support for all versions of Visual C++ 14.1 (Visual Studio 2017).

--------------------------------------
   VFP C++ Compiler Update 20190218
--------------------------------------

Now VFP C++ Compiler can support for all versions of Visual C++ 14.1 (Visual Studio 2017).
For the history of Visual C++ 14.1 (Visual Studio 2017), please refer to:
https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-history
    Visual Studio 2017 version 15.9 Release Notes
    Visual Studio 2017 version 15.8 Release Notes
    Visual Studio 2017 version 15.7 Release Notes
    Visual Studio 2017 version 15.6 Release Notes
    Visual Studio 2017 version 15.5 Release Notes
    Visual Studio 2017 version 15.4 Release Notes
    Visual Studio 2017 version 15.3 Release Notes
    Visual Studio 2017 version 15.2 Release Notes
    Visual Studio 2017 version 15.1 Release Notes
    Visual Studio 2017 version 15.0 Release Notes


**************************************************
2018/12/23

VFP C++ Compiler 2018 RELEASE.


**************************************************
2018/12/22

Bugs Fixed:

    1, The auto increment version number problem.


**************************************************
2018/3/26

Bugs Fixed:

    1, The compatible problems for the antivirus programs.


**************************************************
2017/12/28

VFP C++ Compiler 2017 RELEASE.


**************************************************
2017/3/20

New Features:

    1, Support for Visual C++ 14.1 (Visual Studio 2017).


**************************************************
2017/2/8

Bugs Fixed:

    1, Project includes database files problem.

--------------------------------------
   VFP C++ Compiler Update 20170208
--------------------------------------

1, Project includes database files problem.

For example,
the project includes some database files:
testdata1.dbc
testdata2.dbc
testdata3.dbc
...
these database files (*.dbc, *.dct and *.dcx) will be compiled into the executable file.

For the old VFP C++ Compiler,
these database files (*.dbc, *.dct and *.dcx) will be opened in the system data session automatically
when opening the table (*.dbf) files,
so these database files (*.dbc, *.dct and *.dcx) will NOT be compiled into the executable file,
so the compiled executable file is a corrupted executable file and it can't run.

For the new VFP C++ Compiler,
it will run the command "CLOSE DATABASE ALL" first,
so these database files (*.dbc, *.dct and *.dcx) will be compiled into the executable file,
so it can run fine.


**************************************************
2016/12/29

VFP C++ Compiler 2016 RELEASE.


**************************************************
2016/8/1

New Features:

    1, Support for Visual C++ 14.0 (Visual Studio 2015).


**************************************************
2016/4/10

Bugs Fixed:

    1, FOR EACH ... ENDFOR statement problem.

--------------------------------------
   VFP C++ Compiler Update 20160410
--------------------------------------

1, FOR EACH ... ENDFOR statement problem.

For example,
LOCAL lcComputerName, loWMIService, loItems, loItem
lcComputerName = "."
loWMIService = GETOBJECT("winmgmts:\\" + lcComputerName + "\root\cimv2")
loItems = loWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
FOR EACH loItem IN loItems
   ?loItem.name
ENDFOR
WAIT

For the old VFP C++ Compiler,
it will run the FOR EACH ... ENDFOR statement many times, for example,
FOR EACH loItem IN loItems
   ...
ENDFOR
FOR EACH loItem IN loItems
   ...
ENDFOR
FOR EACH loItem IN loItems
   ...
ENDFOR
but VFP can only run the FOR EACH ... ENDFOR statement once.
When VFP run the FOR EACH ... ENDFOR statement for the first time,
it can run fine.
When VFP run the FOR EACH ... ENDFOR statement for the second time,
it will cause an error:
OLE IDispatch exception code 0 from SWbemObjectSet: Unspecified error.

For the new VFP C++ Compiler,
it will only run the FOR EACH ... ENDFOR statement once,
so it can run fine.


**************************************************
2015/12/23

VFP C++ Compiler 2015 RELEASE.


**************************************************
2015/8/20

New Features:

    1, Support for the user-defined manifest files.

--------------------------------------
   VFP C++ Compiler Update 20150820
--------------------------------------

Usually, we can create a user-defined manifest file <PROJECT-NAME>.EXE.manifest,
then when VFP build the executable file,
the user-defined manifest file will be embedded into the executable file automatically.

For example, for the Win32 executable files compiled with Visual FoxPro 32-bit,
we can create a user-definded manifest file such as:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity 
	version="1.0.0.0" 
	type="win32" 
	name="Microsoft.VisualFoxPro" 
	processorArchitecture="x86"
/>
<description>Visual FoxPro</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
	<security>
		<requestedPrivileges>
			<requestedExecutionLevel level="requireAdministrator" /> 
		</requestedPrivileges>
	</security>
</trustInfo>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            language="*"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
        />
    </dependentAssembly>
</dependency>
</assembly>
then the compiled executable file will run as Administrator.

IMPORTANT NOTE:

For the Win64 executable files compiled with VFP Advanced (x64),
we must change:
processorArchitecture="x86"
to:
processorArchitecture="amd64"


**************************************************
2015/7/5

New Features:

    1, /VFPLIBLANGUAGE=... VFP Support Library Language (only support Visual FoxPro Advanced)

--------------------------------------
   VFP C++ Compiler Update 20150705
--------------------------------------

1, /VFPLIBLANGUAGE=... VFP Support Library Language (only support Visual FoxPro Advanced)

For Visual FoxPro Advanced, we can select VFP Support Library Language:
CHS - Simplified Chinese
CHT - Traditional Chinese
CSY - Czech
DEU - German
ENU - English
ESN - Spanish
FRA - French
KOR - Korean
RUS - Russian


**************************************************
2015/2/26

VFP C++ Compiler (x64).

--------------------------------------
   VFP C++ Compiler Update 20150226
--------------------------------------

1, VFP C++ Compiler (x64).

For the VFP C++ Compiler 32-bit version:
VFP C++ Compiler 32-bit version can run on Windows 32-bit or Windows 64-bit.
When VFP C++ Compiler 32-bit version is running on Windows 32-bit, it supports Visual
FoxPro 6.0, Visual FoxPro 7.0, Visual FoxPro 8.0, Visual FoxPro 9.0 and Visual FoxPro
Advanced version, it can only compile and generate the Win32 executable files.
When VFP C++ Compiler 32-bit version is running on Windows 64-bit, it supports Visual
FoxPro 6.0, Visual FoxPro 7.0, Visual FoxPro 8.0, Visual FoxPro 9.0, Visual FoxPro
Advanced and Visual FoxPro Advanced (x64) version, it can compile and generate the
Win32/Win64 executable files.

For the VFP C++ Compiler 64-bit version:
VFP C++ Compiler 64-bit version can only run on Windows 64-bit.
When VFP C++ Compiler 64-bit version is running on Windows 64-bit, it supports Visual
FoxPro 6.0, Visual FoxPro 7.0, Visual FoxPro 8.0, Visual FoxPro 9.0, Visual FoxPro
Advanced and Visual FoxPro Advanced (x64) version, it can compile and generate the
Win32/Win64 executable files.

If we select "VFP run file" to a 32-bit VFP run file,
for example,
C:\Program Files (x86)\Microsoft Visual FoxPro 9\VFP9.EXE
(or C:\Program Files (x86)\Baiyujia VFP C++ Compiler\vfp9\VFP9.EXE)
C:\Program Files (x86)\Microsoft Visual FoxPro Advanced\VFPA.EXE
(or C:\Program Files (x86)\Baiyujia VFP C++ Compiler\vfpa\VFPA.EXE)
and select "C/C++ compiler file" to a 32-bit make file,
for example,
C:\Program Files (x86)\Baiyujia VFP C++ Compiler\foxrun10\MAKE.BAT
VFP C++ Compiler will compile and generate to the Win32 executable files.

If we select "VFP run file" to a 64-bit VFP run file,
for example,
C:\Program Files\Microsoft Visual FoxPro Advanced\VFPA.EXE
(or C:\Program Files (x86)\Baiyujia VFP C++ Compiler\vfpa64\VFPA.EXE)
and select "C/C++ compiler file" to a 64-bit make file,
for example,
C:\Program Files (x86)\Baiyujia VFP C++ Compiler\foxrun1064\MAKE.BAT
VFP C++ Compiler will compile and generate to the Win64 executable files.


**************************************************
2015/2/12

Bugs Fixed:

    1, SCAN WHILE ... ENDSCAN statement problem.

--------------------------------------
   VFP C++ Compiler Update 20150212
--------------------------------------

1, SCAN WHILE ... ENDSCAN statement problem.

For example,
?"SCAN WHILE: 2,3"
?
GO 2
?"SCAN START - RECN(): "+LTRIM(STR(RECN(),16))
SCAN WHILE MOD(RECN(),5)<=3
   ?RECN()
ENDS
?"SCAN END - RECN(): "+LTRIM(STR(RECN(),16))
WAIT

For the old VFP C++ Compiler,
it will display:
SCAN END - RECN(): 3

For the new VFP C++ Compiler,
it will display:
SCAN END - RECN(): 4

Now VFP C++ Compiler can run SCAN WHILE ... ENDSCAN code same as VFP.


**************************************************
2014/12/20

VFP C++ Compiler 2014 RELEASE.


**************************************************
2014/12/13

New Features:

    1, Support for Visual C++ 12.0 (Visual Studio 2013).


**************************************************
2014/11/28

New Features:

    1, /VCFASTSCXINIT=ON|OFF Fast Convert Form's Properties into Procedure Init
    2, /VCFASTFRXINIT=ON|OFF Fast Convert Report's Expressions into Procedure Init

--------------------------------------
   VFP C++ Compiler Update 20141128
--------------------------------------

1, /VCFASTSCXINIT=ON|OFF Fast Convert Form's Properties into Procedure Init
   /VCFASTFRXINIT=ON|OFF Fast Convert Report's Expressions into Procedure Init

If we set:
/VCFASTSCXINIT=ON Fast Convert Form's Properties into Procedure Init
VFP C++ Compiler only convert the VFP base class object's properties into procedure init,
so convert faster.

If we set:
/VCFASTFRXINIT=ON Fast Convert Report's Expressions into Procedure Init
VFP C++ Compiler only convert the TextBox control's expressions into procedure init,
it does not convert the Label control's expressions into procedure init,
so convert faster.

Recommend to set the following compile options in the more compile options form:
/VCSCXINIT=ON Convert Form's Properties into Procedure Init
/VCFASTSCXINIT=ON Fast Convert Form's Properties into Procedure Init
/VCFRXINIT=ON Convert Report's Expressions into Procedure Init
/VCFASTFRXINIT=ON Fast Convert Report's Expressions into Procedure Init
then VFP C++ Compiler can compile faster.


**************************************************
2014/11/20

New Features:

    1, /VCMULTITASK=ON|OFF Multi-Task Compile Mode
    2, /VCMULTITASKNUMBER=n Multi-Task Number for Compiling Files

--------------------------------------
   VFP C++ Compiler Update 20141120
--------------------------------------

1, /VCMULTITASK=ON|OFF Multi-Task Compile Mode
   /VCMULTITASKNUMBER=n Multi-Task Number for Compiling Files

Usually we can set the multi-task number to the maximum number of threads for the CPU supported,
for example, for a 2 cores 4 threads CPU, we can set it to 4:
/VCMULTITASK=ON Multi-Task Compile Mode
/VCMULTITASKNUMBER=4 Multi-Task Number for Compiling Files

Usually, if we set the multi-task number to 4 for a 4 threads CPU,
the compiled time is about 60% of the compiled time of the single-task compile.
If we set the multi-task number to 8 for a 8 threads CPU,
the compiled time is about 40% of the compiled time of the single-task compile.

Recommend to set the following compile options for multi-core or multi-thread CPU:
/VCINCREMENTAL=ON Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
/VCMULTITASK=ON Multi-Task Compile Mode
/VCMULTITASKNUMBER=4 Multi-Task Number for Compiling Files
then VFP C++ Compiler can compile faster.


**************************************************
2014/11/12

New Features:

    1, /VCINCREMENTAL=ON|OFF Incremental Compile Mode
    2, /VCSAVEINCREMENTAL=ON|OFF Save Incremental Compile Files

--------------------------------------
   VFP C++ Compiler Update 20141112
--------------------------------------

1, /VCINCREMENTAL=ON|OFF Incremental Compile Mode
   /VCSAVEINCREMENTAL=ON|OFF Save Incremental Compile Files

If we set:
/DEBUG=ON Debug Mode
or /VCINCREMENTAL=ON Incremental Compile Mode
or /VCSAVEINCREMENTAL=ON Save Incremental Compile Files
VFP C++ Compiler will retain the temporary files for incremental compile.

Usually, if we set:
/VCINCREMENTAL=ON Incremental Compile Mode
VFP C++ Compiler only compile the modified files in the VFP project file,
that is VFP C++ Compiler can compile faster.

VFP C++ Compiler will re-compile all files in the VFP project file in some cases:
the compile options have been modified except the following compile options:
/VCENCRYPT=ON|OFF Encrypt Executable File
/VCPACKEXE=ON|OFF Compress Executable File
/VFPLIB=ON|OFF Include VFP Support Library
/VCLIB=ON|OFF Include Visual C++ Library
/VCPACKDLL=ON|OFF Compress Dynamic Link Library File
/VCPACK=ON|OFF Pack Executable File
/DEBUG=ON|OFF Debug Mode
/SILENT=ON|OFF Silent Mode
/VCINCREMENTAL=ON|OFF Incremental Compile Mode
/VCSAVEINCREMENTAL=ON|OFF Save Incremental Compile Files
or the incremental compile files have been deleted,
or the main program file has been modified.

Usually, first, we can set:
/VCINCREMENTAL=ON Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
and compile the VFP project.

After this, if we set:
/VCINCREMENTAL=ON Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
VFP C++ Compiler only compile the modified files in the VFP project file,
that is VFP C++ Compiler can compile faster.

If we need re-compile the VFP project, we can set:
/VCINCREMENTAL=OFF does not compile with Incremental Compile Mode
/VCSAVEINCREMENTAL=ON Save Incremental Compile Files
VFP C++ Compiler will re-compile all files in the VFP project file.


**************************************************
2014/10/8

New Features:

    1, VFP C++ Compiler for Windows 10.

--------------------------------------
   VFP C++ Compiler Update 20141008
--------------------------------------

1, VFP C++ Compiler for Windows 10

For some reasons, the GetVersion function can't work correctly on windows 8.1 or later,
please refer to:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724439%28v=vs.85%29.aspx

I have added a MyGetVersion function in vfpcore.dll instead of the GetVersion function
in kernel32.dll, so it can display "VFP C++ Compiler for Windows 8.1" on windows 8.1,
and display "VFP C++ Compiler for Windows 10" on windows 10.

We MUST update vfpcore.dll to the version 20141008.


**************************************************
2014/9/18

Bugs Fixed:

    1, /VCTOLARGEPROC=ON|OFF Compile to Large Procedure Files Format (only used for VFP 9.0)
    2, SET TALK ON in private data session problem.

--------------------------------------
   VFP C++ Compiler Update 20140918
--------------------------------------

1, /VCTOLARGEPROC=ON|OFF Compile to Large Procedure Files Format (only used for VFP 9.0)

For VFP Advanced, it ALWAYS compile to large procedure files format and it has fixed
the large program files BUG, so there is no the compile option for VFP Advanced.

For VFP 6.0, 7.0 and 8.0, it does not support large procedure files format, so there is
no the compile option for VFP 6.0, 7.0 and 8.0.

For VFP 9.0,
If we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
VFP C++ Compiler will compile to large procedure files format and automatically fix
the large program files BUG.

IMPORTANT NOTE:

For the old VFP C++ Compiler,
because the VFP project's version (9.0) is not the same as VFP C++ Compiler's version (10.0),
VFP C++ Compiler will create a temporary program file <PROJECT-NAME>$VCC$.PRG:
ON ERROR *
SET TALK OFF
SET RESOURCE OFF
SET NOTIFY OFF
COMPILE ("VCTEST.PRG")
CLEAR ALL
CLOSE ALL
QUIT
and then run VFP9.EXE <PROJECT-NAME>$VCC$.PRG to compile files,
but there is a problem for this method,
1, the VFP C++ Compiler window lost focus,
2, the VFP 9 windows got focus (although it has the SW_HIDE property),
3, the VFP C++ Compiler window got focus,
so the VFP C++ Compiler window is flashing.

For the new VFP C++ Compiler,
in fact, for ALMOST all files in the project,
1, VFP C++ Compiler compiled to large procedure files format (the VFP Advanced version format),
2, VFP C++ Compiler converted the VFP Advanced version format to the VFP 9.0 version format,
VFP C++ Compiler need not create a temporary program file <PROJECT-NAME>$VCC$.PRG and run it,
so there is no the flash problem, and compile faster.

About the large procedure files format, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vhfox.asp

vfp9 procedure size >64K format

Before vfp9, procedure size <64K, use one WORD can save the size of procedure:
00-01 DW size of procedure

In vfp9, procedure size >64K possible, use one WORD and one DWORD to save the size of procedure:
00-01 DW 0
02-05 DD size of procedure

2, /VCNOTDISPLAY_LARGEPROC=ON|OFF Does Not Display Large Program Files in the Project
(only used for VFP 9.0)

About the large program files BUG, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp

Usually, if we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
then all files in the project will be compiled to large procedure files format,
so we needn't to display large program files in the project.

So recommend to set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
/VCNOTDISPLAY_LARGEPROC=ON Does Not Display Large Program Files in the Project

3, SET TALK ON in private data session problem.

If a form or a report use private data session,
some settings are set to the default values,
for example, SET TALK is set to ON.

Usually, we need change some settings, for example,
SET STEP OFF
SET ECHO OFF
SET DEBUG OFF
SET ESCAPE OFF
SET TALK OFF
SET SAFETY OFF
...

For the old VFP C++ Compiler,
it will insert the statement "SET TALK OFF" into the PROCEDUREs Form.Load() and Form.Init(),
but it will not insert the statement "SET TALK OFF" into the PROCEDUREs
DataEnvironment.BeforeOpenTables() and DataEnvironment.Init().

For the new VFP C++ Compiler,
it will insert the statement "SET TALK OFF" into the PROCEDUREs Form.Load(), Form.Init(),
FormSet.Load(), FormSet.Init(),
ToolBar.Init(), ToolBar.sub-objects.Init(),
DataEnvironment.allmethods(), DataEnvironment.sub-objects.allmethods().

Sometimes, VFP C++ Compiler does not know the form use private data session or not.
For example,
in the class library, we can set:
DataSession = 1 && default data session
but in the form (it is subclassed from the class library), we can set:
DataSession = 2 && private data session
then the form (and the class library) use private data session.

When VFP C++ Compiler compile the class library,
it does not know the class library use private data session or not.
So, for the new VFP C++ Compiler,
it ALWAYS insert the statement "SET TALK OFF" into some PROCEDUREs.


**************************************************
2014/9/1

New Features:

    1, /VCNAMEEXCLUDEVCD2=ON|OFF Does Not Compile Variable Names in String Delimiters
    2, /VCNAMEEXCLUDEVCD3=ON|OFF Does Not Compile Field Names or Property Names

--------------------------------------
   VFP C++ Compiler Update 20140901
--------------------------------------

1, /VCNAMEEXCLUDEVCD2=ON|OFF Does Not Compile Variable Names in String Delimiters

If we set:
/VCNAMEEXCLUDEVCD2=ON Does Not Compile Variable Names in String Delimiters
VFP C++ Compiler does not compile variable names in string delimiters.

For example,
x1 = 123
?"The value of x1 is "+STR(x1,10)
VFP C++ Compiler does not compile the variable name x1.

2, /VCNAMEEXCLUDEVCD3=ON|OFF Does Not Compile Field Names or Property Names

If we set:
/VCNAMEEXCLUDEVCD3=ON Does Not Compile Field Names or Property Names
VFP C++ Compiler does not compile field names or property names.

For example,
fld1 = 123
?STR(t1.fld1,10)
VFP C++ Compiler does not compile the variable name (or field name) fld1.

3, /VCNAMEEXCLUDEVCW=ON|OFF Does Not Compile Variable Names Specified
in the User Reserved Words File

If we want does not compile other variable names,
we can set:
/VCNAMEEXCLUDEVCW=ON Does Not Compile Variable Names Specified in the User Reserved Words File
and add the variable names to the user reserved words file (<PROJECT-NAME>.VCW).

For example,
cancelar
or:
cancelar Caption = "Cancelar"
VFP C++ Compiler only get the first word in per line.

4, /VCNAMEONLYTEXTMERGEDELI=ON|OFF For Text Merge Statements, Only Compile Variable Names
in the Text Merge Delimiters

If we set:
/VCNAMEONLYTEXTMERGEDELI=OFF For Text Merge Statements, Compile All Variable Names in the Statements

For example,
x1 = 123
text
The value of x1 is << x1 >>
endtext

will be compiled to:
_vc_aa = 123
text
The value of _vc_aa is << _vc_aa >>
endtext

If we set:
/VCNAMEONLYTEXTMERGEDELI=ON For Text Merge Statements, Only Compile Variable Names
in the Text Merge Delimiters

For example,
x1 = 123
text
The value of x1 is << x1 >>
endtext

will be compiled to:
_vc_aa = 123
text
The value of x1 is << _vc_aa >>
endtext


**************************************************
2014/4/8

New Features:

    1, Default Compile Options.

--------------------------------------
   VFP C++ Compiler Update 20140408
--------------------------------------

1, Default Compile Options.

     Run the setup program VCSETUP.EXE will write the Default Compile Options
(VFP run file and C/C++ compiler file) to the file default.vcf.

     Run the VFP C++ Compiler VC.EXE will read the Default Compile Options
(VFP run file and C/C++ compiler file) from the file default.vcf.


**************************************************
2014/3/15

New Features:

    1, VFP C++ Compiler setup program.

--------------------------------------
   VFP C++ Compiler Update 20140315
--------------------------------------

1, VFP C++ Compiler setup program.

     Run the setup program VCSETUP.EXE can Install VFP C++ Compiler to the folder
C:\Program Files\Baiyujia VFP C++ Compiler.

2, Access the Program Files folder problem.

     Usually, we have no "Write" or "Full Control" permission for the Program Files folder
on Windows 7 or later.

     Now VFP C++ Compiler will copy files from the folder C:\Program Files\Baiyujia VFP C++
Compiler\foxrun<n> to the temporary folder such as <PROJECT-FOLDER>\FOXRUNTEMP, and then
generate the C source files such as foxrun*.c in the temporary folder. After compiled
the C source files, VFP C++ Compiler will remove the temporary folder.


**************************************************
2013/12/30

VFP C++ Compiler 2013 RELEASE.


**************************************************
2013/9/26

Bugs Fixed:

    1, Update icon resource failed problem.

--------------------------------------
   VFP C++ Compiler Update 20130926
--------------------------------------

1, Update icon resource failed problem.

Sometimes (for example, some anti-virus program), VFP C++ Compiler update icon resource failed,
then the generated executable file's icon is VFP C++ Compiler's icon.

The new VFP C++ Compiler has fixed this BUG.


**************************************************
2013/5/18

New Features:

    1, /VCPLUGIN_MYPROTECT=ON|OFF Run MyProtect Plugin

--------------------------------------
   VFP C++ Compiler Update 20130518
--------------------------------------

1, /VCPLUGIN_MYPROTECT=ON|OFF Run MyProtect Plugin

VFP C++ Compiler can run the specified MyProtect plugin before generate the executable file.

For more details, please refer to the vcsdk\myprotect\readme.txt.


**************************************************
2013/5/15

Bugs Fixed:

    1, Some statements Optimize Code error problem.

--------------------------------------
   VFP C++ Compiler Update 20130515
--------------------------------------

1, Some statements Optimize Code error problem.

The old VFP C++ Compiler can Optimize Code correctly for some statements, for example,
xa=x1(x2)+x3+VAL("aa")+VAL("aaa")
but the old VFP C++ Compiler can not Optimize Code correctly for some statements such as:
xa=x1[x2]+x3+VAL("aa")+VAL("aaa")
xa=x1 (x2)+x3+VAL("aa")+VAL("aaa")
xa=x1 [x2]+x3+VAL("aa")+VAL("aaa")

The new VFP C++ Compiler has fixed this BUG.


**************************************************
2013/5/1

Bugs Fixed:

    1, Compile and generate a large (greater than 100MB, but less than 250MB) executable file problem.

--------------------------------------
   VFP C++ Compiler Update 20130501
--------------------------------------

1, Compile and generate a large (greater than 100MB, but less than 250MB) executable file problem.

That is,
the old VFP C++ Compiler can only compile and generate an executable file less than 100MB,
the new VFP C++ Compiler can compile and generate an executable file less than 250MB.

For the dynamic link library file, it can greater than 250MB.
But if the dynamic link library file greater than 250MB, VFP C++ Compiler will not compress it,
because the UPX program can't compress a large executable file (or dynamic link library file)
greater than 250MB.


**************************************************
2012/12/8

VFP C++ Compiler 2012 RELEASE.


**************************************************
2012/12/1

Bugs Fixed:

    1, The Command window will be showed when compiling files problem.

--------------------------------------
   VFP C++ Compiler Update 20121201
--------------------------------------

1, The Command window will be showed when compiling files problem.

If the VFP project's version (6.0, 7.0, 8.0, 9.0, 10.0) is not the same as VFP C++ Compiler's version
(9.0, 10.0), VFP C++ Compiler will create a temporary program file <PROJECT-NAME>$VCC$.PRG:
ON ERROR *
SET TALK OFF
SET RESOURCE OFF
SET NOTIFY OFF
COMPILE ("VCTEST.PRG")
CLEAR ALL
CLOSE ALL
QUIT
and then run VFP<n>.EXE <PROJECT-NAME>$VCC$.PRG to compile files.

If the Command window is dockable (in VFP 7.0, 8.0, 9.0, 10.0),
although we call ShellExecuteEx() with SW_HIDE parameter (or _SCREEN.VISIBLE=.F.),
but the Command window will be showed.

The new VFP C++ Compiler has fixed the bug.


**************************************************
2012/11/8

New Features:

    1, /VCINSERTINITCODE=ON|OFF Insert Init Code

--------------------------------------
   VFP C++ Compiler Update 20121108
--------------------------------------

1, /VCINSERTINITCODE=ON|OFF Insert Init Code

If we set:
/VCINSERTINITCODE=OFF does not Insert Init Code

VFP C++ Compiler will insert the default init code:

IF FILE(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL")
ELSE
=MESSAGEBOX(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL"+"!",48,"VFP C++ Compiler")
QUIT
ENDIF
IF FILE(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL").AND.;
AT(UPPE(LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (LEFT(_VFP.SERVERNAME,RAT(".",_VFP.SERVERNAME)-1)+".DLL") ADDITIVE
ENDIF

into the main program file.

If we set:
/VCINSERTINITCODE=ON Insert Init Code

VFP C++ Compiler will insert init code specified in the user init code file (<PROJECT-NAME>.VCI).

We can load a specified .DLL file, for example,

IF !FILE(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL")
=MESSAGEBOX(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL"+"!",48,"VFP C++ Compiler")
QUIT
ENDIF
IF FILE(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL").AND.;
AT(UPPE(GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (GETENV("WINDIR")+"\SYSTEM32\VCTEST.DLL") ADDITIVE
ENDIF

We can load multiple .DLL files for multiple projects, for example,

IF FILE(SYS(5)+SYS(2003)+"\VCTEST.DLL").AND.;
AT(UPPE(SYS(5)+SYS(2003)+"\VCTEST.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (SYS(5)+SYS(2003)+"\VCTEST.DLL") ADDITIVE
ENDIF
IF FILE(SYS(5)+SYS(2003)+"\VCTEST1.DLL").AND.;
AT(UPPE(SYS(5)+SYS(2003)+"\VCTEST1.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (SYS(5)+SYS(2003)+"\VCTEST1.DLL") ADDITIVE
ENDIF
IF FILE(SYS(5)+SYS(2003)+"\VCTEST2.DLL").AND.;
AT(UPPE(SYS(5)+SYS(2003)+"\VCTEST2.DLL"),UPPE(SET("LIBRARY")))=0
SET LIBRARY TO (SYS(5)+SYS(2003)+"\VCTEST2.DLL") ADDITIVE
ENDIF


**************************************************
2012/10/18

Bugs Fixed:

    1, DODEFAULT() function problem.

--------------------------------------
   VFP C++ Compiler Update 20121018
--------------------------------------

1, DODEFAULT() function problem.

For the older version,
sometimes, the DODEFAULT() function will run the parent-class code twice or
will not run the parent-class code.

The new VFP C++ Compiler has fixed the bug.


**************************************************
2012/9/23

New Features:

    1, Automatic use "Single Step Compile Mode" to compile the statements between
ON ERROR command and ON ERROR.

--------------------------------------
   VFP C++ Compiler Update 20120923
--------------------------------------

1, Automatic use "Single Step Compile Mode" to compile the statements between
ON ERROR command and ON ERROR.

For example,

ON ERROR lok = .f.
lok = .t.
THISFORM.OLecontrol1.COMmPort=99
IF lOk
    WAIT WINDOW 'port open'
    thisform.olecontrol1.Enabled=.t.
ELSE
    WAIT WINDOW 'port not open'
ENDIF
ON error

For the older version,
it will compile the vfp code:

lok = .t.
THISFORM.OLecontrol1.COMmPort=99
IF lOk
    WAIT WINDOW 'port open'
    thisform.olecontrol1.Enabled=.t.
ELSE
    WAIT WINDOW 'port not open'
ENDIF

to one C funciton __VC_TEST_xxx().

It will run all code in the C funciton __VC_TEST_xxx(),
and then generates an error,
and then call the ON ERROR handling (run the code: lok = .f.).

The new VFP C++ Compiler will automatic compile the vfp code between:

ON ERROR xxx
...
...
...
ON ERROR (or ON ERROR *, or ON ERROR &xxx)

as "Single Step Compile Mode":

ON ERROR lok = .f.
__VC_TEST_A(1)
__VC_TEST_A(2)
IF __VC_TEST_A(3)
__VC_TEST_A(4)
__VC_TEST_A(5)
ELSE
__VC_TEST_A(6)
ENDIF
ON error

then it can run fine.


**************************************************
2012/9/13

Bugs Fixed:

    1, The trailing spaces of the user-define property problem.

--------------------------------------
   VFP C++ Compiler Update 20120913
--------------------------------------

1, The trailing spaces of the user-define property problem.

For example,

sensitive_altgr = .F.<cr><lf>
action_ctrl =  <cr><lf>
action_alt =  <cr><lf>
_memberdata = ...

There are 2 spaces between "action_ctrl =" and <cr><lf>,
the old VFP C++ Compiler will cut the 2 spaces,
it will be converted to:

sensitive_altgr = .F.<cr><lf>
action_ctrl =<cr><lf>
action_alt =<cr><lf>
_memberdata = ...

then vfp will get wrong properties of action_ctrl and action_alt.

The new VFP C++ Compiler will reserved the spaces between "action_ctrl =" and <cr><lf>.


**************************************************
2012/9/5

New Features:

    1, Support for Visual C++ 11.0 (Visual Studio 2012).


**************************************************
2012/8/12

Bugs Fixed:

    1, FOR EACH ... IN collection statement, but there is no element in collection problem.


**************************************************
2012/7/18

New Features:

    1, /VCFILESEARCHPATH=... File Search Path

--------------------------------------
   VFP C++ Compiler Update 20120718
--------------------------------------

1, /VCFILESEARCHPATH=... File Search Path

Now you can set the file search path for class library files and header files.


**************************************************
2012/7/9

VFP C++ Compiler 10.0 for Windows.

--------------------------------------
   VFP C++ Compiler Update 20120709
--------------------------------------

1, VFP C++ Compiler 10.0 for Windows.

Now VFP C++ Compiler Support for VFP Advanced.

If we set:
/VFPLIB=ON Include VFP Support Library
for VFP Advanced project,
VFP C++ Compiler compiled and generated executable file contain the code of vfpar.dll
and vfpcore.dll, so the executable file need not vfpar.dll and vfpcore.dll to run.


**************************************************
2012/4/18

Bugs Fixed:

    1, The project file is invalid after rebuild the project.
    2, The simple method of Compile Variable Names for Multiple Projects.

--------------------------------------
   VFP C++ Compiler Update 20120418
--------------------------------------

1, The project file is invalid after rebuild the project.

Sometimes VFP C++ Compiler will rebuild the project, for example,
BUILD EXE ("vctest.exe") FROM ("vctest.pjx")
Someone said sometimes the project file is invalid after rebuild the project.

Now VFP C++ Compiler rebuild the executable file from a backup project file, for example,
COPY FILE ("vctest.pjx") TO ("vctest$vcproject$.pjx")
COPY FILE ("vctest.pjt") TO ("vctest$vcproject$.pjt")
BUILD EXE ("vctest.exe") FROM ("vctest$vcproject$.pjx")
Then VFP C++ Compiler will not write the original project file.

2, The simple method of Compile Variable Names for Multiple Projects.

Now to compile variable names for multiple projects is more simple, please refer to:
vctest\vctest_multiproj\readme.txt
vctest\vctest_multiproj_simple\readme.txt


**************************************************
2012/3/28

New Features:

    1, /VCTOLARGEPROC=ON|OFF Compile to Large Procedure Files Format
    2, /VCNOTDISPLAY_LARGEPROC=ON|OFF Does Not Display Large Program Files in the Project
    3, /VCNOTDISPLAY_RELATIONALEXPR=ON|OFF Does Not Display Invalid RelationalExpr Expressions

--------------------------------------
   VFP C++ Compiler Update 20120328
--------------------------------------

1, /VCTOLARGEPROC=ON|OFF Compile to Large Procedure Files Format

If we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
VFP C++ Compiler will compile to large procedure files format and automatically fix
the large program files BUG.

About the large procedure files format, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vhfox.asp

vfp9 procedure size >64K format

Before vfp9, procedure size <64K, use one WORD can save the size of procedure:
00-01 DW size of procedure

In vfp9, procedure size >64K possible, use one WORD and one DWORD to save the size of procedure:
00-01 DW 0
02-05 DD size of procedure

2, /VCNOTDISPLAY_LARGEPROC=ON|OFF Does Not Display Large Program Files in the Project

About the large program files BUG, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp

Usually, if we set:
/VCTOLARGEPROC=ON Compile to Large Procedure Files Format
then all files in the project will be compiled to large procedure files format,
so we needn't to display large program files in the project,
we can set:
/VCNOTDISPLAY_LARGEPROC=ON Does Not Display Large Program Files in the Project

3, /VCNOTDISPLAY_RELATIONALEXPR=ON|OFF Does Not Display Invalid RelationalExpr Expressions

About the invalid relationalexpr expressions BUG, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix4.asp

4, Another vfp9 fix - LARGE PROCEDURE IN THE FORM, please refer to:
baiyujia website: www.baiyujia.com/vfpdocuments/f_vfp9fix3.asp


**************************************************
2012/3/22

New Features:

    1, Invalid RelationalExpr Expressions.

--------------------------------------
   VFP C++ Compiler Update 20120322
--------------------------------------

1, Invalid RelationalExpr Expressions.

About the Invalid RelationalExpr Expressions BUG, Please refer to:
http://www.baiyujia.com/vfpdocuments/f_vfp9fix4.asp

If VFP C++ Compiler show the WARNING MESSAGE: Invalid RelationalExpr Expressions,
we MUST fix the Invalid RelationalExpr Expressions BUG.


**************************************************
2012/3/18

New Features:

    1, /VCEXPANDEXPEVALUATE=ON|OFF Expand Expression With EVALUATE() Function
    2, /VCEXPANDEXPCHR=ON|OFF Expand Expression With CHR() Function

--------------------------------------
   VFP C++ Compiler Update 20120318
--------------------------------------

1, /VCEXPANDEXPEVALUATE=ON Expand Expression With EVALUATE() Function

To expand expression with EVALUATE() function, for example,
x1="ABC"
will be expanded to:
x1=(EVALUATE('"ABC"'))

2, /VCEXPANDEXPCHR=ON|OFF Expand Expression With CHR() Function

To expand expression with CHR() function, for example,
x1="ABC"
will be expanded to:
x1=(CHR(65)+CHR(66)+CHR(67))


**************************************************
2012/3/1

New Features:

    1, Executable file compression rate optimization.

--------------------------------------
   VFP C++ Compiler Update 20120301
--------------------------------------

1, Executable file compression rate optimization.

Now the encrypted executable file compression rate between 10% and 30%.

IMPORTANT:

You MUST update vfpcore.dll to the version 20120301.

The vfpcore.dll version 20120301 is compatible for the programs compiled with the
old VFP C++ Compiler, that is you can update vfpcore.dll to the version 20120301,
the old programs (and the new programs) compiled with VFP C++ Compiler can run well.


**************************************************
2012/1/8

New Features:

    1, Large Program Files in the Project.

--------------------------------------
   VFP C++ Compiler Update 20120108
--------------------------------------

1, Large Program Files in the Project.

About the Large Program Files BUG, Please refer to:
http://www.baiyujia.com/vfpdocuments/f_vfp9fix2.asp

If VFP C++ Compiler show the WARNING MESSAGE: Large Program Files in the Project,
recommend to fixed the Large Program Files BUG.


**************************************************
2011/12/8

VFP C++ Compiler 2011 RELEASE.


**************************************************
2011/12/1

New Features:

    1, /VCNAMEMULTIPROJ=ON|OFF Compile Variable Names for Multiple Projects

--------------------------------------
   VFP C++ Compiler Update 20111201
--------------------------------------

1, /VCNAMEMULTIPROJ=ON|OFF Compile Variable Names for Multi Project

That is we can build 2 or more projects,
then we can run the statements in test.exe such as:
DO test1.exe
DO xxx in test1.exe

Please refer to the vctest\vctest_multiproj\readme.txt.


**************************************************
2011/11/16

New Features:

    1, /VCNAMECATEGORY=ON|OFF Compile Category Variable Names
       /VCNAMEMACRO=ON|OFF Compile Macro Variable Names

--------------------------------------
   VFP C++ Compiler Update 20111116
--------------------------------------

1, /VCNAMECATEGORY=ON|OFF Compile Category Variable Names
   /VCNAMEMACRO=ON|OFF Compile Macro Variable Names

We can Compile (or don't compile) Category (or Macro) Variable Names.

About "Variable Names List ...",
for "Only Compile Variable Names in the User Variable Names File"
and "Does Not Compile Variable Names Specified in the User Reserved Words File",
now we can input the Category Variable Names in the editbox such as:
l* && local variables
g* && public variables


**************************************************
2011/11/8

New Features:

    1, /VCSTEP=ON|OFF Single Step Compile Mode

--------------------------------------
   VFP C++ Compiler Update 20111108
--------------------------------------

1, /VCSTEP=ON|OFF Single-step Compile Mode

     The default is OFF, VFP C++ Compiler compiled many VFP statements to one C function.
     If set to ON, VFP C++ Compiler compiled only one VFP statement to one C function.

To resolved the ON ERROR, RETURN TO, RETRY statements problem,

Method 1 (the simple method):
we can set:
/VCSTEP=ON Single-step Compile Program
then VFP C++ Compiler will compile the ON ERROR, RETURN TO, RETRY statements same as VFP.

The /VCSTEP=ON|OFF option is used for all files in the project.

This method is simple, we needn't to edit our code,
but the Structured Programming Commands such as:
     DO CASE ... ENDCASE
     DO WHILE ... ENDDO
     FOR EACH ... ENDFOR
     FOR ... ENDFOR
     IF ... ENDIF
     SCAN ... ENDSCAN
     TRY ... ENDTRY
will leave in the exe file (VFP code), not in the dll file (C code),
so the code security will be reduced.

Recommend to set:
/VCSTEP=ON Single-step Compile Program
for our old project,
because we needn't to edit our code and the compiled code will run fine.

Please refer to:
vctest\vctest_on_error_vcstep\vctest.vcf, vctest.prg
vctest\vctest_return_to_vcstep\vctest.vcf, vctest.prg
vctest\vctest_retry_vcstep\vctest.vcf, vctest.prg

Method 2 (the recommend method):
Or we can use =[FOXSTEP ON|OFF] statement to set Single-step Compile for some files
(or some code), other files will not be Single-step Compiled.

That is we can set Single-step Compile for some code (relate to the ON ERROR, RETURN TO,
RETRY statements), the code security will be reduced.
Other code will not be Single-step Compiled, so the other code is more secure.

Please refer to:
vctest\vctest_on_error_foxstep\vctest.prg
vctest\vctest_return_to_foxstep\vctest.prg
vctest\vctest_retry_foxstep\vctest.prg

Method 3 (the old method):
we can use =[FOXRUN ON|OFF] statement to do it too.

Please refer to:
vctest\vctest_on_error\vctest.prg
vctest\vctest_return_to\vctest.prg
vctest\vctest_retry\vctest.prg


**************************************************
2011/11/1

Bugs Fixed:

    1, Run more than one report at the same time problem.

--------------------------------------
   VFP C++ Compiler Update 20111101
--------------------------------------

1, Run more than one report at the same time problem.

I have added 2 options in the "Form and Report Compile Options":

/VCFRX_CLEANDATA_SHOW_POSITION=ON|OFF Clean Data for Show Position

     If we set (the default setting):
     /VCFRX_CLEANDATA_SHOW_POSITION=OFF does not Clean Data for Show Position
     then VFP C++ Compiler does not Clean Data for Show Position.

     Usually, we can set:
     /VCFRX_CLEANDATA_SHOW_POSITION=ON Clean Data for Show Position
     then VFP C++ Compiler will run command:
     REPLACE ALL curpos WITH .F.
     to Clean Data for Show Position.

/VCFRX_AUTORELEASEVARIABLES=ON|OFF Automatic Release Variables Defined
in Report's Procedure Init

     If we set (the default setting):
     /VCFRX_AUTORELEASEVARIABLES=OFF does not Automatic Release Variables Defined
     in Report's Procedure Init, then VFP C++ Compiler does not Automatic Release
     Variables Defined in Report's Procedure Init.

     If there is no more than one report at the same time, that is only one report
     at any time, then we can set:
     /VCFRX_AUTORELEASEVARIABLES=ON Automatic Release Variables Defined
     in Report's Procedure Init, then VFP C++ Compiler will Automatic Release Variables
     Defined in Report's Procedure Init.

For example,

SELE 0
USE t1
DEFINE WIND w1 FROM 0,0 TO 30,30
*ACTI WIND w1
REPO FORM r1 PREVIEW WIND w1 NOWAIT

SELE 0
USE t2
DEFINE WIND w2 FROM 0,40 TO 30,70
*ACTI WIND w2
REPO FORM r2 PREVIEW WIND w2 NOWAIT

...

For the code, we MUST set (the default setting):
/VCFRX_AUTORELEASEVARIABLES=OFF does not Automatic Release Variables Defined
in Report's Procedure Init


**************************************************
2011/10/1

Bugs Fixed:

    1, Fix the compatible problem with virtual machine products such as Microsoft Virtual PC
and Oracle VM VirtualBox.

--------------------------------------
   VFP C++ Compiler Update 20111001
--------------------------------------

1, Fix the compatible problem with virtual machine products such as Microsoft Virtual PC
and Oracle VM VirtualBox.

If you install Microsoft Virtual PC or Oracle VM VirtualBox,
the old VFP C++ Compiler (VC.EXE) can't start.
Please update to the new VFP C++ Compiler 20111001.


**************************************************
2011/9/22

New Features:

    1, /VCMOVEGOTO=ON|OFF Move GOTO Statement

--------------------------------------
   VFP C++ Compiler Update 20110922
--------------------------------------

1, /VCMOVEGOTO=ON|OFF Move GOTO Statement

     To move statement, for example,
     statement
     will be moved to:
     =[GOTO FOXRUN_GOTO_LABEL_XXX_START]
     =[FOXRUN_GOTO_LABEL_XXX_END:]
     ...
     =[FOXRUN_GOTO_LABEL_XXX_START:]
     statement
     =[GOTO FOXRUN_GOTO_LABEL_XXX_END]

If we set:
/VCMOVEGOTO=ON Move GOTO Statement
that is:
=[GOTO FOXRUN_GOTO_LABEL_XXX_START]
=[GOTO FOXRUN_GOTO_LABEL_XXX_END]
and other =[GOTO ...] statements will be moved again.


**************************************************
2011/9/5

New Features:

    1, Support for Visual C++ 10.0 (Visual Studio 2010).

--------------------------------------
   VFP C++ Compiler Update 20110905
--------------------------------------

1, Support for Visual C++ 10.0.

     IMPORTANT NOTE:

     The program compiled with Visual C++ 10.0 only run on Windows XP SP2 or later.


**************************************************
2011/8/16

Bugs Fixed:

    1, TRY ... ENDTRY statement problem.

--------------------------------------
   VFP C++ Compiler Update 20110816
--------------------------------------

1, About Encrypt and Compress Executable File

If we set:
/VCENCRYPT=ON Encrypt Executable File
/VCPACKEXE=ON Compress Executable File
then the Executable File can be compressed, the compression ratio is about 80%.

If we set:
/VCENCRYPT=OFF does not Encrypt Executable File
/VCPACKEXE=ON Compress Executable File
then the Executable File can be compressed very small, the compression ratio is about 20%.

If we set:
/VCENCRYPT=OFF does not Encrypt Executable File
/VCPACKEXE=OFF does not Compress Executable File
then the Executable File can't be compressed,
but you can use other third-party VFP encryption products such as DeFox and FoxShell to
encrypt/compress the Executable File.

2, TRY ... ENDTRY statement problem.

An example from DV_FOXHELP9.CHM:

CLEAR
ON ERROR DO errorHandler && Create a functional error handler to test.
oMyObject=CREATEOBJECT("myClass")
oMyObject.myMethod1()
* oMyObject.myMethod2()  && Remove comment character to test this line.

DEFINE CLASS myClass AS Custom

   PROCEDURE myMethod1
      ? "myMethod1"
      TRY
         ? "Calling myMethod2 in TRY block for myMethod1."
         THIS.myMethod2()
      CATCH TO omyError
         ? "Entered CATCH block for myMethod1. Caught: ", ;  
            omyError.ErrorNo, " ", omyError.Message
      ENDTRY
   ENDPROC

   PROCEDURE myMethod2
      ?
      ? "myMethod2"
      ? "Generating an error in myMethod2."
      x=y         && Variable y does not exist. CATCH handles this error.
      ? "This line displays if CATCH does not handle the prece* error."
   ENDPROC
ENDDEFINE

If we call myMethod2() in a TRY ... ENDTRY block,
      ? "This line displays if CATCH does not handle the prece* error."
will not be run.

If we call myMethod2() not in a TRY ... ENDTRY block,
      ? "This line displays if CATCH does not handle the prece* error."
will be run.

I have found a useful function SYS(2410) - Error Handler can resolved this problem.

when causes an error,

if SYS(2410)='1' then call _Error(), the next statements will not be run.

else

the next statements in the C function will be run continue,
at the end, call the _Error(), then jump to the error process program.

Now VFP C++ Compiler can run TRY ... ENDTRY code same as VFP.


**************************************************
2011/8/1

New Features:

    1, Form and Report Compile Options.

--------------------------------------
   VFP C++ Compiler Update 20110801
--------------------------------------

1, Form and Report Compile Options.

For more details, please refer to others\readme*.txt.

IMPORTANT:

     Some program use a TextBox object to call a UDF function and set Print When is Flase,
     so the UDF function can be called normal, but not print anything in the report.
     In this case, we can't Delete Data When Print When is Flase, so we MUST set:
     /VCFRX_DELETEDATA_WHEN_PRINTWHENISFALSE=OFF does not Delete Data When Print When
     is Flase (Supexpr==".F.")

The old VFP C++ Compiler will automatic Delete Data When Print When is Flase.
So please update to the new VFP C++ Compiler 20110801.

2. Please Download VFP C++ Compiler Runtime Library from:
   http://www.baiyujia.com/f_downloadproc_vclib.asp
   the password is www.baiyujia.com.

Compress options in make_packexe.bat and make_packdll.bat have changed to:
upx --best --compress-icons=0 %1

If we set:
/VCENCRYPT=OFF does not Encrypt Executable File
then the Executable File can be compressed very small,
it's about 15% of the original file size.

3. If you use Mycheck SDK and selected C/C++ compiler file is foxrun8\make.bat or foxrun9\make.bat,
   for some reasons about SEH, the dll code can't run correctly on Windows XP.
   The new VFP C++ Compiler 20110801 has fixed this BUG.

If we select Visual C++ 8.0/9.0 to compile foxrun*.c,
then the foxrun.dll include the IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG data,
the IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG save some reserved SEH data,
and it is only used on Windows NT, Windows 2000 and Windows XP.

The new VFP C++ Compiler 20110801 will clear the IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG data,
then the program can run correctly on Windows XP (and Windows vista and Windows 7 and after).


**************************************************
2011/7/25

New Features:

    1, EXTENDED CODE is not available when set =[FOXRUN OFF].

--------------------------------------
   VFP C++ Compiler Update 20110725
--------------------------------------

1, EXTENDED CODE is not available when set =[FOXRUN OFF].

For example,
in the vctest.prg:
...
=[foxrun off]
...
=[include mycheck_isdebuggerpresent.c]
...
=[foxrun on]
...

The statement:
=[include mycheck_isdebuggerpresent.c]
it is only a normal VFP statement, and it do nothing.

The new version VFP C++ Compiler will write a warning message to the vctest.err:
EXTENDED CODE is not available when set =[FOXRUN OFF].
=[include mycheck_isdebuggerpresent.c]


**************************************************
2011/6/26

New Features:

    1, /APPERROR=ON|OFF Application Error Log File

--------------------------------------
   VFP C++ Compiler Update 20110626
--------------------------------------

1, VFP C++ Compiler version 20110401-20110625 has a BUG:

IF x1>0 ; && xxx
and x2>0 && xxx
...

the old VFP C++ Compiler can't process these statements correctly.

Please update to the new version VFP C++ Compiler 20110626.

2, New Functions: /APPERROR=ON|OFF Application Error Log File

Usually, the code:

?x1
?x2
?x3

VFP C++ Compiler only return the last error:
Variable "x3" is not found

If we set:
/APPERROR=ON Application Error Log File
and then compile the project,
and then run the application,
it will generate an Error Log File include all errors, like:
06/27/11 08:02:50 AM VCTEST: (170) ?X1 
06/27/11 08:02:50 AM VCTEST: (170) ?X2 
06/27/11 08:02:50 AM VCTEST: (170) ?X3 
now we can know it causes 3 errors.

the function is only used for test/debug,
and please set:
     /VCOPT=OFF does not Optimize Code
     /VCOPT2=OFF does not Optimize Code Level II
because if we set:
     /VCOPT=ON Optimize Code
     /VCOPT2=ON Optimize Code Level II
the error message in the Error Log File is p-code data,
it is hard to understand.


**************************************************
2011/6/1

Bugs Fixed:

    1, Fix the "Visual Foxpro can not start. Could not load resources" error.


**************************************************
2011/5/18

New Features:

    1, Data Alignment: 1 byte, 2 bytes, 4 bytes, 8 bytes, 16 bytes.


**************************************************
2011/5/1

New Features:

    1, /VCOPT2=ON|OFF Optimize Code Level II.
    2, Support for Windows 7 (x86/x64).

--------------------------------------
   VFP C++ Compiler Update 20110501
--------------------------------------

1, /VCOPT2=ON|OFF Optimize Code Level II.

If we set /VCOPT=ON,
VFP C++ Compiler will Optimize the _Execute() function.

If we set /VCOPT2=ON,
VFP C++ Compiler will Optimize the _Evaluate() function,
then the generated code is smaller and run faster.

2, Support for Windows 7 (x86/x64).

The new version only fix some directories access problem such as:
C:\Windows\System32 and C:\Windows\SysWOW64,
C:\Program Files and C:\Program Files (x86),
then VFP C++ Compiler can normal run on Windows 7 x64 system.
VFP C++ Compiler is a 32-bit program.


**************************************************
2011/4/6

New Features:

    1, Move Statement compiled speed optimization.

--------------------------------------
   VFP C++ Compiler Update 20110406
--------------------------------------

1. Move Statement compiled speed optimization.

Now VFP C++ Compiler is faster when Move Statement for large program.


**************************************************
2011/3/6

New Features:

     1, LOCAL COMPILE OPTION.

--------------------------------------
   VFP C++ Compiler Update 20110306
--------------------------------------

1. LOCAL COMPILE OPTION.

We can set a higher (or lower) encryption options for some code,
please refer to vcsdk\mycheck\mycheck.prg.


**************************************************
2011/2/22

New Features:

     1, /VCSCXINITMODLIST=... Convert Form's Properties into Procedure Init Modulus List
     2, /VCFRXINITMODLIST=... Convert Report's Expressions into Procedure Init Modulus List


**************************************************
2011/2/18

New Features:

     1, /VCNAMEONLYVCV=ON|OFF Only Compile Variable Names in the User Variable Names File
     2, /VCNAMEEXCLUDEVCW=ON|OFF Does Not Compile Variable Names Specified in the User
Reserved Words File


**************************************************
2011/1/1

New Features:

    1, Support third-party VFP encryption products such as DeFox and FoxShell.

--------------------------------------
   VFP C++ Compiler Update 20110101
--------------------------------------

1. Support third-party VFP encryption products such as DeFox and FoxShell.

Please don't select "Encrypt Executable File",
then VFP C++ Compiler will generate a standard VFP executable file,
then we can use DeFox or FoxShell to encrypt it.


**************************************************
2010/12/8

VFP C++ Compiler 2010 RELEASE.


**************************************************
2010/11/18

Bugs Fixed:

    1, If the project has been moved, then automatically update the project.
    2, Mycheck Bugs Fixed.


**************************************************
2010/10/8

New Features:

    1, VFP C++ Compiler Software Development Kit.


**************************************************
2010/10/1

New Features:

    1, /VCPACK=ON|OFF Pack Executable File


**************************************************
2010/9/1

New Features:

    1, Compress Dynamic Link Library File optimization.


**************************************************
2010/8/8

Bugs Fixed:

    1, Project includes duplicate files problem.


**************************************************
2010/7/28

New Features:

    1, /VCFASTDECOMPIFCONDNUMBER=n Fast Decompose IF Statement Condition Number
    2, /VCFASTDECOMPIFRECURSELEVEL=n Fast Decompose IF Statement Recurse Level
    3, /VCFASTDECOMPIFCODELINENUMBER=n Fast Decompose IF Statement Code Line Number
    4, /VCFASTDECOMPIFCODELENGTH=n Fast Decompose IF Statement Code Length
    5, /VCFASTDECOMPDOCASECASENUMBER=n Fast Decompose DO CASE Statement CASE Number
    6, /VCFASTDECOMPDOCASECONDNUMBER=n Fast Decompose DO CASE Statement Condition Number
    7, /VCFASTDECOMPDOCASERECURSELEVEL=n Fast Decompose DO CASE Statement Recurse Level
    8, /VCFASTDECOMPDOCASECODELINENUMBER=n Fast Decompose DO CASE Statement Code Line Number
    9, /VCFASTDECOMPDOCASECODELENGTH=n Fast Decompose DO CASE Statement Code Length


**************************************************
2010/7/11

New Features:

    1, INLINE C STATEMENT
    2, INLINE ASSEMBLY STATEMENT
    3, INCLUDE C FILE
    4, INCLUDE ASSEMBLY FILE


**************************************************
2010/7/1

New Features:

    1, /VCANTIDISASM=ON|OFF Anti-Disassembly


**************************************************
2010/6/11

Bugs Fixed:

    1, Ignore the THEN, DO commands at the end of the Structured Programming Commands:
    CASE ... [THEN | DO]
    DO WHILE ... [THEN | DO]
    FOR EACH ... [THEN | DO]
    FOR ... [THEN | DO]
    IF ... [THEN | DO]
    SCAN ... [THEN | DO]


**************************************************
2010/5/1

New Features:

    1, Support for Digital Signature.


**************************************************
2010/4/15

New Features:

    1, Form Files compiled speed optimization.


**************************************************
2010/4/5

New Features:

    1, /VCNAMETYPE=4|5 Variable Names Encode Type: MD5 Code - 16|32 Characters


**************************************************
2010/3/12

New Features:

    1, <PROJECT-NAME>.VCD2: Dictionary file for variable name in string delimiters


**************************************************
2010/2/1

New Features:

    1, /VCEXPANDINLINE=ON|OFF Expand Inline Function


**************************************************
2010/1/1

New Features:

    1, /VCMOVE=ON|OFF Move Statement


**************************************************
2009/12/28

VFP C++ Compiler 2009 RELEASE.


**************************************************
2009/11/18

Bugs Fixed:

    1, Decompose Complex Conditional Statement when the condition is .NULL. problem.


**************************************************
2009/10/25

VFP C++ Compiler 9.00 for Windows.


**************************************************
2009/10/20

New Features:

    1, /VCKEYWORD=ON|OFF Compile Keywords


**************************************************
2009/10/15

New Features:

    1, /VCPACKEXE=ON|OFF Compress Executable File


**************************************************
2009/10/1

New Features:

    1, More Compile Options.


**************************************************
2009/9/18

Bugs Fixed:

    1, FOR EACH ... IN collection statement problem.


**************************************************
2009/9/8

New Features:

    1, /VCENCRYPT=ON|OFF Encrypt Executable File


**************************************************
2009/8/28

New Features:

    1, LABEL and GOTO statement.


**************************************************
2009/8/18

New Features:

    1, /VCDECOMPCOND=ON|OFF Decompose Complex Conditional Statement

Bugs Fixed:

    1, Sometimes SET LIBRARY TO statement failed.


**************************************************
2009/8/5

New Features:

    1, Support for Split into multiple libraries and then merge.


**************************************************
2009/7/22

New Features:

    1, /VCEXPANDEXP=ON|OFF Expand Expression With IIF() Function


**************************************************
2009/4/26

Bugs Fixed:

    1, Ignore the note after ENDIF, ENDCASE, ENDDO, ENDFOR, ENDSCAN, ENDTRY.
    2, Ignore the note between #IF .F. and #ELIF, #ELSE, #ENDIF.
    3, Ignore the non-pre-process statement in the head file (.h) specified with #INCLUDE.


**************************************************
2009/3/26

Bugs Fixed:

    1, QUIT and CANCEL statement does not call ON SHUTDOWN program problem.


**************************************************
2009/1/15

New Features:

    1, Support for COM server program.


**************************************************
2009/1/10

New Features:

    1, /APPDEBUG=ON|OFF Application Debug Mode


**************************************************
2008/12/28

VFP C++ Compiler 2008 RELEASE.


**************************************************
2008/12/20

Bugs Fixed:

    1, Semicolon (;) at the end of \, \\ statement problem.
    2, #INCLUDE "FILENAME" ('FILENAME', [FILENAME]) statement problem.
    3, Properties after PROCEDURE|FUNCTION problem.
    4, #DEFINE compiled speed optimization.


**************************************************
2008/12/8

Bugs Fixed:

    1, RETURN @ statement problem.
    2, RETURN object statement problem.
    3, SET DEVELOPMENT ON statement problem.
    4, _ACCESS method problem.
    5, _ASSIGN method problem.


**************************************************
2008/12/1

New Features:

    1, Support for FXP/APP/EXE files in the project.
    2, Debug Mode.


**************************************************
2008/11/10

New Features:

    1, Support for Visual C++ 9.0 (Visual Studio 2008).


**************************************************
2008/10/1

New Features:

    1, Support for Version information.


**************************************************
2008/8/31

Bugs Fixed:

    1, Sometimes VFP C++ Compiler may stop responding.

New Features:

    1, Support for API library merger.


**************************************************
2008/8/8

New Features:

    1, VFP runtime files: Simplified Chinese, Traditional Chinese, English.


**************************************************
2008/6/13

New Features:

    1, /VCOPT=ON|OFF Optimize Code


**************************************************
2008/5/25

New Features:

    1, /VCPACKDLL=ON|OFF Compress Dynamic Link Library File


**************************************************
2008/5/15

New Features:

    1, Some statements (for example, x=x+1) faster than VFP Natural compile run speed.


**************************************************
2008/3/15

Bugs Fixed:

    1, #DEFINE variable problem.

New Features:

    1, Anti-decompile with FoxTools.


**************************************************
2008/2/15

Bugs Fixed:

    1, Code Page problem.
    2, PRIVATE ALL statement problem.
    3, QUIT, CANCEL statement can not quit VFP problem.
    4, Accessing files using relative path problem.
    5, Form's Extended property problem.
    6, Form's Init method include PARAMETERS statement problem.
    7, Report automatically open tables in the data environment problem.
    8, Class library file's Top, Left, Height, Width properties problem.

New Features:

    1, Add reserved words: function names of FOXTOOLS.FLL, common WIN32API function names.
    2, /VCLIB=ON|OFF Include Visual C++ Library
    3, LANGUAGE=CN|CHS|CHT|EN.


********** END OF HISTORY.TXT ********************