--------------------------------------------------------------------------------
                      [NEW.....] VFP 9.0 FIX - THE VFPLMDMODE TERM IN THE CONFIGURATION FILE
                                November 2024
                 --------------------------------------------------------------------------------
                                     CCB



1. THE VFPLMDMODE TERM:

     VFPLMDMODE - Specifies the copy memory mode for Visual FoxPro Large Memory Driver (VFPLMD)

     Specifies the copy memory mode for Visual FoxPro Large Memory Driver (VFPLMD).

     VFPLMDMODE = nValue

     Parameters
     nValue
     The nValue parameter specifies the copy memory mode for Visual FoxPro Large Memory Driver (VFPLMD).
     The range for nValue is 0 to 14.
     The default value is 0 for Visual FoxPro Advanced 10.0 and 10.1.
     The default value is 14 for Visual FoxPro Advanced 10.2 or later.
     0
     The DeviceIoControl mode, VFP Advanced will call the DeviceIoControl Windows API for Visual FoxPro Large Memory Driver (VFPLMD).
     1
     The Read-Byte and Write-Byte mode, VFP Advanced will read a byte and write a byte for Visual FoxPro Large Memory Driver (VFPLMD).
     2
     The Repeat-Move-Byte mode, VFP Advanced will run the rep movsb command for Visual FoxPro Large Memory Driver (VFPLMD).
     3
     The Read-Dword and Write-Dword mode, VFP Advanced will read a dword and write a dword for Visual FoxPro Large Memory Driver (VFPLMD).
     4
     The Repeat-Move-Dword mode, VFP Advanced will run the rep movsd command for Visual FoxPro Large Memory Driver (VFPLMD).
     5
     The Read-Qword and Write-Qword mode, VFP Advanced will read a qword and write a qword for Visual FoxPro Large Memory Driver (VFPLMD).
     6
     The Repeat-Move-Qword mode, VFP Advanced will run the rep movsq command for Visual FoxPro Large Memory Driver (VFPLMD).
     7
     The memcpy mode, VFP Advanced will call the memcpy function for Visual FoxPro Large Memory Driver (VFPLMD).
     8
     The Read-Byte and Write-Byte (align data on 8-byte boundaries) mode, VFP Advanced will read a byte and write a byte for Visual FoxPro Large Memory Driver (VFPLMD).
     9
     The Repeat-Move-Byte (align data on 8-byte boundaries) mode, VFP Advanced will run the rep movsb command for Visual FoxPro Large Memory Driver (VFPLMD).
     10
     The Read-Dword and Write-Dword (align data on 8-byte boundaries) mode, VFP Advanced will read a dword and write a dword for Visual FoxPro Large Memory Driver (VFPLMD).
     11
     The Repeat-Move-Dword (align data on 8-byte boundaries) mode, VFP Advanced will run the rep movsd command for Visual FoxPro Large Memory Driver (VFPLMD).
     12
     The Read-Qword and Write-Qword (align data on 8-byte boundaries) mode, VFP Advanced will read a qword and write a qword for Visual FoxPro Large Memory Driver (VFPLMD).
     13
     The Repeat-Move-Qword (align data on 8-byte boundaries) mode, VFP Advanced will run the rep movsq command for Visual FoxPro Large Memory Driver (VFPLMD).
     14
     The memcpy (align data on 8-byte boundaries) mode, VFP Advanced will call the memcpy function for Visual FoxPro Large Memory Driver (VFPLMD).

     Remarks
     We ALWAYS set VFPLMDMODE = 0 in Visual FoxPro Advanced 10.0 and 10.1.


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Fun40a45d :: ; proc near
             push ebp                                                        ;0x0040a45d :        55
             lea ebp ,  dword ptr [ esp - 104 ]                              ;0x0040a45e :        8d6c2498
             sub esp , 0454h                                                 ;0x0040a462 :        81ec54040000
             mov eax ,  dword ptr [ Data937090 ]                             ;0x0040a468 :        a190709300
             mov  ecx , dword ptr [ ebp + 112 ]                              ;0x0040a46d :        8b4d70
             push ebx                                                        ;0x0040a470 :        53
             push esi                                                        ;0x0040a471 :        56
             mov  esi , dword ptr [ ebp + 116 ]                              ;0x0040a472 :        8b7574
             mov  dword ptr [ ebp + 100 ] , eax                              ;0x0040a475 :        894564
             lea eax ,  dword ptr [ esi + 0642h ]                            ;0x0040a478 :        8d8642060000
             mov  dword ptr [ ebp + 0FFFFFD04h ] , eax                       ;0x0040a47e :        898504fdffff
             push edi                                                        ;0x0040a484 :        57
             lea eax ,  dword ptr [ esi + 0A5Ch ]                            ;0x0040a485 :        8d865c0a0000
             mov  dword ptr [ ebp + 0FFFFFD24h ] , eax                       ;0x0040a48b :        898524fdffff
             xor ebx , ebx                                                   ;0x0040a491 :        33db
             xor eax , eax                                                   ;0x0040a493 :        33c0
             inc eax                                                         ;0x0040a495 :        40
             push ebx                                                        ;0x0040a496 :        53
             push eax                                                        ;0x0040a497 :        50
             mov  dword ptr [ ebp + 0FFFFFD10h ] , eax                       ;0x0040a498 :        898510fdffff
             push ebx                                                        ;0x0040a49e :        53
             lea eax ,  dword ptr [ ebp + 0FFFFFF38h ]                       ;0x0040a49f :        8d8538ffffff
             push eax                                                        ;0x0040a4a5 :        50
             mov  dword ptr [ ebp + 0FFFFFD28h ] , ebx                       ;0x0040a4a6 :        899d28fdffff
             mov  dword ptr [ ebp + 0FFFFFF58h ] , ecx                       ;0x0040a4ac :        898d58ffffff
             call Fun430428                                                  ;0x0040a4b2 :        e8715f0200
             cmp eax , 04h                                                   ;0x0040a4b7 :        83f804
             jne Label40a660                                                 ;0x0040a4ba :        0f85a0010000
             lea ecx ,  dword ptr [ ebp + 0FFFFFF60h ]                       ;0x0040a4c0 :        8d8d60ffffff
             mov edx , 0100h                                                 ;0x0040a4c6 :        ba00010000
             lea eax ,  dword ptr [ ebp + 0FFFFFE38h ]                       ;0x0040a4cb :        8d8538feffff
             call Fun42c33e                                                  ;0x0040a4d1 :        e8681e0200
             cmp  byte ptr [ ebp + 0FFFFFF60h ] , 05Fh                       ;0x0040a4d6 :        80bd60ffffff5f
             jne Label40a540                                                 ;0x0040a4dd :        7561
             lea edi ,  dword ptr [ ebp + 0FFFFFF60h ]                       ;0x0040a4df :        8dbd60ffffff
             call Fun43099a                                                  ;0x0040a4e5 :        e8b0640200
             mov edi , eax                                                   ;0x0040a4ea :        8bf8
             lea eax ,  dword ptr [ edi - 36 ]                               ;0x0040a4ec :        8d47dc
             cmp eax , 034h                                                  ;0x0040a4ef :        83f834
             ja Label40a540                                                  ;0x0040a4f2 :        774c
             movzx eax ,byte ptr [ eax + offset Data4134f1 ]                          ;0x0040a4f4 :        0fb680f1344100
             jmp  dword ptr [ 4 * eax + offset DataPtr4134e9 ]                           ;0x0040a4fb :        ff2485e9344100

     Label40a502 ::
             cmp  dword ptr [ ebp + 120 ] , ebx                              ;0x0040a502 :        395d78
             jne Label5d60f1                                                 ;0x0040a505 :        0f85e6bb1c00

     Label40a50b ::
             xor eax , eax                                                   ;0x0040a50b :        33c0
             lea ecx ,  dword ptr [ ebp + 0FFFFFF38h ]                       ;0x0040a50d :        8d8d38ffffff
             call Fun43d764                                                  ;0x0040a513 :        e84c320300
             lea eax ,  dword ptr [ ebp + 0FFFFFF60h ]                       ;0x0040a518 :        8d8560ffffff
             push eax                                                        ;0x0040a51e :        50
             mov eax , edi                                                   ;0x0040a51f :        8bc7
             call Fun409f9c                                                  ;0x0040a521 :        e876faffff
             mov eax , edi                                                   ;0x0040a526 :        8bc7
             sub eax , 04Dh                                                  ;0x0040a528 :        83e84d
             je Label5d613c                                                  ;0x0040a52b :        0f840bbc1c00
             dec eax                                                         ;0x0040a531 :        48
             je Label5d611c                                                  ;0x0040a532 :        0f84e4bb1c00

     Label40a538 ::
             xor eax , eax                                                   ;0x0040a538 :        33c0
             inc eax                                                         ;0x0040a53a :        40
             jmp Label40a666                                                 ;0x0040a53b :        e926010000

     Label40a540 ::
             cmp  dword ptr [ ebp + 0FFFFFF3Ch ] , 06D1h                     ;0x0040a540 :        81bd3cffffffd1060000
             je Label5d615c                                                  ;0x0040a54a :        0f840cbc1c00
             lea eax ,  dword ptr [ ebp + 0FFFFFF40h ]                       ;0x0040a550 :        8d8540ffffff
             lea ecx ,  dword ptr [ ebp + 0FFFFFF60h ]                       ;0x0040a556 :        8d8d60ffffff
             call Fun415309                                                  ;0x0040a55c :        e8a8ad0000
             cmp eax , 07h                                                   ;0x0040a561 :        83f807
             mov  dword ptr [ ebp + 0FFFFFD18h ] , eax                       ;0x0040a564 :        898518fdffff
             je Label40a5e2                                                  ;0x0040a56a :        7476
             cmp eax , 067h                                                  ;0x0040a56c :        83f867
             je Label40a5e2                                                  ;0x0040a56f :        7471
             cmp eax , 030h                                                  ;0x0040a571 :        83f830
             je Label5d61b3                                                  ;0x0040a574 :        0f8439bc1c00
             mov  edi , strncmp                                ;0x0040a57a :        8b3dcc799100
             pushd 04h                                                       ;0x0040a580 :        6a04
             lea eax ,  dword ptr [ ebp + 0FFFFFE38h ]                       ;0x0040a582 :        8d8538feffff
             pushd offset Data9191dc                                                  ;0x0040a588 :        68dc919100
             push eax                                                        ;0x0040a58d :        50
             call edi                                                        ;0x0040a58e :        ffd7
             add esp , 0Ch                                                   ;0x0040a590 :        83c40c
             test eax , eax                                                  ;0x0040a593 :        85c0
             je Label5d61fb                                                  ;0x0040a595 :        0f8460bc1c00
             pushd 05h                                                       ;0x0040a59b :        6a05
             lea eax ,  dword ptr [ ebp + 0FFFFFE38h ]                       ;0x0040a59d :        8d8538feffff
             pushd offset Data91cc84                                                  ;0x0040a5a3 :        6884cc9100
             push eax                                                        ;0x0040a5a8 :        50
             call edi                                                        ;0x0040a5a9 :        ffd7
             add esp , 0Ch                                                   ;0x0040a5ab :        83c40c
             test eax , eax                                                  ;0x0040a5ae :        85c0
             je Label5d61fb                                                  ;0x0040a5b0 :        0f8445bc1c00

     Label40a5b6 ::
             cmp  dword ptr [ ebp + 120 ] , ebx                              ;0x0040a5b6 :        395d78
             je Label40a5e2                                                  ;0x0040a5b9 :        7427


     ;
     ;                 ---------------------------------------------------------------------
     ;                      VFP 9.0 FIX - THE VFPLMDMODE TERM IN THE CONFIGURATION FILE
     ;                                November 2024
     ;                 ---------------------------------------------------------------------
     ;                                     CCB
     ;
     ; The VFPLMDMODE term in the configuration file.
     ;
     ; 2024/11/13, by ccb
     ;

             lea ecx ,  dword ptr [ ebp + 0FFFFFF60h ]
     vfpa_config_vfplmdmode_start:
             cmp byte ptr [ecx] , 056h ;; V
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+1] , 046h ;; F
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+2] , 050h ;; P
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+3] , 04Ch ;; L
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+4] , 04Dh ;; M
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+5] , 044h ;; D
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+6] , 04Dh ;; M
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+7] , 04Fh ;; O
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+8] , 044h ;; D
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+9] , 045h ;; E
             jne vfpa_config_vfplmdmode_end
             cmp byte ptr [ecx+10] , 000h
             jne vfpa_config_vfplmdmode_end
             xor edi , edi
             inc edi
             push ebx
             push edi
             push ebx
             lea eax ,  dword ptr [ ebp + 0FFFFFF38h ]
             push eax
             call Fun430428
             cmp eax , edi
             jne Label5d6256
             cmp  dword ptr [ ebp + 0FFFFFF3Ch ] , 010h
             jne Label5d6256
             push ebx
             push edi
             push ebx
             lea eax ,  dword ptr [ ebp + 0FFFFFF38h ]
             push eax
             call Fun430428
             cmp eax , 05h
             jne Label5d6256
             mov eax ,  dword ptr [ Data937fdc ]
             pushd 0Eh
             pushd 00h
             lea esi ,  dword ptr [ ebp + 0FFFFFF38h ]
             mov  dword ptr [ ebp + 0FFFFFF58h ] , eax
             mov  byte ptr [ ebp + 0FFFFFF38h ] , 07h
             call Fun87e084
             cmp eax , 0FFFFFFFFh
             je Label5d6256
             mov dword ptr vfpa_sys9087_data,eax
             mov dword ptr vfpa_sys99009076_data,eax
     vfpa_config_vfplmdmode_end1:
             IFDEF RAX
             IF VFPA_VERSION GE 102
             ELSE
             mov dword ptr vfpa_sys9087_data,00h
             mov dword ptr vfpa_sys99009076_data,00h
             ENDIF
             ELSE
             IF VFPA_VERSION GE 102
             ELSE
             mov dword ptr vfpa_sys9087_data,00h
             mov dword ptr vfpa_sys99009076_data,00h
             ENDIF
             ENDIF
     vfpa_config_vfplmdmode_end2:
             mov eax,dword ptr vfpa_sys9087_data
             mov dword ptr vfpa_config_vfplmdmode_data,eax
             jmp Label40a660
     vfpa_config_vfplmdmode_end:


             push ebx                                                        ;0x0040a5bb :        53
             xor edi , edi                                                   ;0x0040a5bc :        33ff
             inc edi                                                         ;0x0040a5be :        47
             push edi                                                        ;0x0040a5bf :        57
             push ebx                                                        ;0x0040a5c0 :        53
             lea eax ,  dword ptr [ ebp + 0FFFFFF38h ]                       ;0x0040a5c1 :        8d8538ffffff
             push eax                                                        ;0x0040a5c7 :        50
             call Fun430428                                                  ;0x0040a5c8 :        e85b5e0200
             cmp eax , edi                                                   ;0x0040a5cd :        3bc7
             jne Label5d6256                                                 ;0x0040a5cf :        0f8581bc1c00
             cmp  dword ptr [ ebp + 0FFFFFF3Ch ] , 010h                      ;0x0040a5d5 :        83bd3cffffff10
             jne Label5d6256                                                 ;0x0040a5dc :        0f8574bc1c00

     Label40a5e2 ::
             mov  eax , dword ptr [ ebp + 0FFFFFD18h ]                       ;0x0040a5e2 :        8b8518fdffff
             cmp eax , 0F6h                                                  ;0x0040a5e8 :        3df6000000
             ja Label5d6273                                                  ;0x0040a5ed :        0f8780bc1c00
             movzx eax ,byte ptr [ eax + offset Data413716 ]                          ;0x0040a5f3 :        0fb68016374100
             jmp  dword ptr [ 4 * eax + offset DataPtr413526 ]                           ;0x0040a5fa :        ff248526354100

     Label40a601 ::
             lea edx ,  dword ptr [ ebp + 0FFFFFD00h ]                       ;0x0040a601 :        8d9500fdffff
             lea eax ,  dword ptr [ ebp + 0FFFFFC68h ]                       ;0x0040a607 :        8d8568fcffff
             call Fun42c27f                                                  ;0x0040a60d :        e86d1c0200
             push ebx                                                        ;0x0040a612 :        53
             push eax                                                        ;0x0040a613 :        50
             call Fun42c2be                                                  ;0x0040a614 :        e8a51c0200
             cmp eax , ebx                                                   ;0x0040a619 :        3bc3
             pop ecx                                                         ;0x0040a61b :        59
             pop ecx                                                         ;0x0040a61c :        59
             jne Label40a64e                                                 ;0x0040a61d :        752f
             lea eax ,  dword ptr [ ebp + 0FFFFFD1Ch ]                       ;0x0040a61f :        8d851cfdffff
             push eax                                                        ;0x0040a625 :        50
             lea eax ,  dword ptr [ ebp + 0FFFFFF38h ]                       ;0x0040a626 :        8d8538ffffff
             call Fun40a75a                                                  ;0x0040a62c :        e829010000
             test eax , eax                                                  ;0x0040a631 :        85c0
             je Label40a64e                                                  ;0x0040a633 :        7419
             lea eax ,  dword ptr [ ebp + 0FFFFFD1Ch ]                       ;0x0040a635 :        8d851cfdffff
             xor ecx , ecx                                                   ;0x0040a63b :        33c9
             push eax                                                        ;0x0040a63d :        50
             inc ecx                                                         ;0x0040a63e :        41
             call Fun4157c8                                                  ;0x0040a63f :        e884b10000
             mov  eax , dword ptr [ ebp + 116 ]                              ;0x0040a644 :        8b4574
             or  dword ptr [ eax + 0A78h ] , 01h                             ;0x0040a647 :        8388780a000001

     Label40a64e ::
             lea eax ,  dword ptr [ ebp + 0FFFFFD00h ]                       ;0x0040a64e :        8d8500fdffff
             push eax                                                        ;0x0040a654 :        50
             lea eax ,  dword ptr [ ebp + 0FFFFFC68h ]                       ;0x0040a655 :        8d8568fcffff

     Label40a65b ::
             call Fun42d200                                                  ;0x0040a65b :        e8a02b0200

     Label40a660 ::
             mov  eax , dword ptr [ ebp + 0FFFFFD10h ]                       ;0x0040a660 :        8b8510fdffff

     Label40a666 ::
             mov  ecx , dword ptr [ ebp + 100 ]                              ;0x0040a666 :        8b4d64
             call Fun42bf1d                                                  ;0x0040a669 :        e8af180200
             pop edi                                                         ;0x0040a66e :        5f
             pop esi                                                         ;0x0040a66f :        5e
             pop ebx                                                         ;0x0040a670 :        5b
             add ebp , 068h                                                  ;0x0040a671 :        83c568
             leave                                                           ;0x0040a674 :        c9
             ret 010h                                                        ;0x0040a675 :        c21000


4. APPLIES TO:

     VFP 10 (VFP Advanced)


5. REFERENCE WEBSITES:

     1, baiyujia.com:
     http://www.baiyujia.com
     http://www.baiyujia.com/vfpdocuments/f_vfpconfigterms.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix113.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix114.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix282.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix283.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix284.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix285.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix286.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix288.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix294.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix295.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix296.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix297.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix302.asp
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix358.asp


6. OTHER:

     For reference only, there is no guarantees.

     Any questions or suggestions, please send me an email at ccb2000@163.com.