---------------------------------------------------------------------------------------------
                      [ENHANCED] VFP 9.0 FIX - THE VERSION() FUNCTION RETURNS THE NEW VERSION INFORMATION
                                 January 2024
                 ---------------------------------------------------------------------------------------------
                                     CCB



1. BUG:

     In vfp9, usually the VERSION() function returns "Visual FoxPro 09.00.0000.7423 for Windows",
     and the _VFP.VERSION property returns "9.0".

     In VFP Advanced, usually the VERSION() function returns "Visual FoxPro 10.00.0000.yymm for Windows",
     and the _VFP.VERSION property returns "10.0".
     For backward compatibility, we can disable the VERSION() function returns the new version information,
     then the VERSION() function will return "Visual FoxPro 09.00.0000.7423 for Windows",
     and the _VFP.VERSION property will return "9.0".


2. CAUSE:

     There are some BUGs in the following code.


3. RESOLUTION:

     We can write some code to fix the BUG.

     Fun5000e2 :: ; proc near


     ;
     ;                 ----------------------------------------------------------------------------------
     ;                      VFP 9.0 FIX - THE VERSION() FUNCTION RETURNS THE NEW VERSION INFORMATION
     ;                                  March 2019
     ;                 ----------------------------------------------------------------------------------
     ;                                     CCB
     ;
     ; The VERSION() function returns the new version information.
     ;
     ; 2019/3/12, by ccb
     ;

     ;         pushd 01CFFh                                                    ;0x005000e2 :        68ff1c0000
     ;         pushd 00h                                                       ;0x005000e7 :        6a00
     ;         pushd 00h                                                       ;0x005000e9 :        6a00
     ;         pushd 09h                                                       ;0x005000e9 :        6a09

             cmp dword ptr vfpa_sys9018_data,00h
             jne Label5000e3
             pushd 01CFFh
             pushd 00h
             pushd 00h
             pushd 09h
             jmp Label5000ed
     Label5000e3 ::
             mov eax,offset Data920200
             xor ecx,ecx
             mov cl,byte ptr [eax+0Ah]
             sub cl,30h
             mov edx,ecx
             shl edx,03h
             add edx,ecx
             add edx,ecx
             mov eax,offset Data920200
             xor ecx,ecx
             mov cl,byte ptr [eax+0Bh]
             sub cl,30h
             add edx,ecx
             mov ecx,edx
             shl edx,03h
             add edx,ecx
             add edx,ecx
             mov ecx,edx
             shl edx,03h
             add edx,ecx
             add edx,ecx
     Label5000e3_month_start ::
             mov eax,offset Data920200
             xor ecx,ecx
     Label5000e3_month_Jan ::
             cmp dword ptr [eax],"naJ["
             jne Label5000e3_month_Feb
             mov cl,01h
             jmp Label5000e3_month_end
     Label5000e3_month_Feb ::
             cmp dword ptr [eax],"beF["
             jne Label5000e3_month_Mar
             mov cl,02h
             jmp Label5000e3_month_end
     Label5000e3_month_Mar ::
             cmp dword ptr [eax],"raM["
             jne Label5000e3_month_Apr
             mov cl,03h
             jmp Label5000e3_month_end
     Label5000e3_month_Apr ::
             cmp dword ptr [eax],"rpA["
             jne Label5000e3_month_May
             mov cl,04h
             jmp Label5000e3_month_end
     Label5000e3_month_May ::
             cmp dword ptr [eax],"yaM["
             jne Label5000e3_month_Jun
             mov cl,05h
             jmp Label5000e3_month_end
     Label5000e3_month_Jun ::
             cmp dword ptr [eax],"nuJ["
             jne Label5000e3_month_Jul
             mov cl,06h
             jmp Label5000e3_month_end
     Label5000e3_month_Jul ::
             cmp dword ptr [eax],"luJ["
             jne Label5000e3_month_Aug
             mov cl,07h
             jmp Label5000e3_month_end
     Label5000e3_month_Aug ::
             cmp dword ptr [eax],"guA["
             jne Label5000e3_month_Sep
             mov cl,08h
             jmp Label5000e3_month_end
     Label5000e3_month_Sep ::
             cmp dword ptr [eax],"peS["
             jne Label5000e3_month_Oct
             mov cl,09h
             jmp Label5000e3_month_end
     Label5000e3_month_Oct ::
             cmp dword ptr [eax],"tcO["
             jne Label5000e3_month_Nov
             mov cl,0Ah
             jmp Label5000e3_month_end
     Label5000e3_month_Nov ::
             cmp dword ptr [eax],"voN["
             jne Label5000e3_month_Dec
             mov cl,0Bh
             jmp Label5000e3_month_end
     Label5000e3_month_Dec ::
             cmp dword ptr [eax],"ceD["
             jne Label5000e3_month_other
             mov cl,0Ch
             jmp Label5000e3_month_end
     Label5000e3_month_other ::
             mov cl,01h
             jmp Label5000e3_month_end
     Label5000e3_month_end ::
             add edx,ecx
             push edx
             pushd 00h
             pushd 00h
             pushd 0Ah
             jmp Label5000ed


     Label5000ed ::
             pushd offset Data921d80                                                  ;0x005000ed :        68801d9200
             push  dword ptr [ esp + 24 ]                                    ;0x005000f2 :        ff742418
             call Fun43089c                                                  ;0x005000f6 :        e8a107f3ff
             add esp , 018h                                                  ;0x005000fb :        83c418
             ret 04h                                                         ;0x005000fe :        c20400


4. APPLIES TO:

     VFP 10 (VFP Advanced)


5. REFERENCE WEBSITES:

     1, baiyujia.com:
     http://www.baiyujia.com
     http://www.baiyujia.com/vfpdocuments/f_vfp9fix76.asp


6. OTHER:

     For reference only, there is no guarantees.

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