------------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - SAVING THE SETTING OF SET COLLATE TO MACHINE January 2024 ------------------------------------------------------------------------------- CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), we can save the current settings in the Windows registry: Tools --> Options --> Set As Default For VFP 9.0, the current settings will be saved in the key HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro\9.0\Options. For VFP Advanced 32-bit, the current settings will be saved in the key HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro\10.n\Options. For VFP Advanced 64-bit, the current settings will be saved in the key HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro64\10.n\Options. But for the setting of SET COLLATE TO "MACHINE", it will not be saved in the Windows registry (in fact, it will be saved as an empty string). 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Label825972 :: mov eax , dword ptr [esi] ;0x00825972 : 8b06 mov ebx , dword ptr [ ebp + 0A4h ] ;0x00825974 : 8b9da4000000 mov ecx , dword ptr [ eax + 0140h ] ;0x0082597a : 8b8840010000 push ebx ;0x00825980 : 53 push edi ;0x00825981 : 57 shr ecx , 05h ;0x00825982 : c1e905 and ecx , 01h ;0x00825985 : 83e101 pushd 08766h ;0x00825988 : 6866870000 mov eax , offset Data94549c ;0x0082598d : b89c549400 call Fun8249e6 ;0x00825992 : e84ff0ffff mov eax , dword ptr [esi] ;0x00825997 : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825999 : 8b8080030000 push ebx ;0x0082599f : 53 push edi ;0x008259a0 : 57 and eax , 01h ;0x008259a1 : 83e001 push eax ;0x008259a4 : 50 mov dl , 016h ;0x008259a5 : b216 call Fun824553 ;0x008259a7 : e8a7ebffff mov eax , dword ptr [esi] ;0x008259ac : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x008259ae : 8b8080030000 push ebx ;0x008259b4 : 53 shr eax , 1 ;0x008259b5 : d1e8 push edi ;0x008259b7 : 57 and eax , 01h ;0x008259b8 : 83e001 push eax ;0x008259bb : 50 mov dl , 046h ;0x008259bc : b246 call Fun824553 ;0x008259be : e890ebffff mov eax , dword ptr [esi] ;0x008259c3 : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x008259c5 : 8b8080030000 push ebx ;0x008259cb : 53 shr eax , 02h ;0x008259cc : c1e802 push edi ;0x008259cf : 57 and eax , 01h ;0x008259d0 : 83e001 push eax ;0x008259d3 : 50 mov dl , 064h ;0x008259d4 : b264 call Fun824553 ;0x008259d6 : e878ebffff mov eax , dword ptr [esi] ;0x008259db : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x008259dd : 8b8080030000 push ebx ;0x008259e3 : 53 shr eax , 03h ;0x008259e4 : c1e803 push edi ;0x008259e7 : 57 and eax , 01h ;0x008259e8 : 83e001 push eax ;0x008259eb : 50 mov dl , 049h ;0x008259ec : b249 call Fun824553 ;0x008259ee : e860ebffff mov eax , dword ptr [esi] ;0x008259f3 : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x008259f5 : 8b8080030000 push ebx ;0x008259fb : 53 shr eax , 04h ;0x008259fc : c1e804 push edi ;0x008259ff : 57 and eax , 01h ;0x00825a00 : 83e001 push eax ;0x00825a03 : 50 mov dl , 017h ;0x00825a04 : b217 call Fun824553 ;0x00825a06 : e848ebffff mov eax , dword ptr [esi] ;0x00825a0b : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825a0d : 8b8080030000 push ebx ;0x00825a13 : 53 shr eax , 05h ;0x00825a14 : c1e805 push edi ;0x00825a17 : 57 and eax , 01h ;0x00825a18 : 83e001 push eax ;0x00825a1b : 50 mov dl , 05Fh ;0x00825a1c : b25f call Fun824553 ;0x00825a1e : e830ebffff mov eax , dword ptr [esi] ;0x00825a23 : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825a25 : 8b8080030000 push ebx ;0x00825a2b : 53 shr eax , 06h ;0x00825a2c : c1e806 push edi ;0x00825a2f : 57 and eax , 01h ;0x00825a30 : 83e001 push eax ;0x00825a33 : 50 mov dl , 01Eh ;0x00825a34 : b21e call Fun824553 ;0x00825a36 : e818ebffff mov eax , dword ptr [esi] ;0x00825a3b : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825a3d : 8b8080030000 push ebx ;0x00825a43 : 53 shr eax , 07h ;0x00825a44 : c1e807 push edi ;0x00825a47 : 57 and eax , 01h ;0x00825a48 : 83e001 push eax ;0x00825a4b : 50 mov dl , 0Fh ;0x00825a4c : b20f call Fun824553 ;0x00825a4e : e800ebffff mov eax , dword ptr [esi] ;0x00825a53 : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825a55 : 8b8080030000 push ebx ;0x00825a5b : 53 shr eax , 08h ;0x00825a5c : c1e808 push edi ;0x00825a5f : 57 and eax , 01h ;0x00825a60 : 83e001 push eax ;0x00825a63 : 50 mov dl , 061h ;0x00825a64 : b261 call Fun824553 ;0x00825a66 : e8e8eaffff mov eax , dword ptr [esi] ;0x00825a6b : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825a6d : 8b8080030000 push ebx ;0x00825a73 : 53 shr eax , 09h ;0x00825a74 : c1e809 push edi ;0x00825a77 : 57 and eax , 01h ;0x00825a78 : 83e001 push eax ;0x00825a7b : 50 mov dl , 036h ;0x00825a7c : b236 call Fun824553 ;0x00825a7e : e8d0eaffff mov eax , dword ptr [esi] ;0x00825a83 : 8b06 mov eax , dword ptr [ eax + 0380h ] ;0x00825a85 : 8b8080030000 push ebx ;0x00825a8b : 53 shr eax , 0Ah ;0x00825a8c : c1e80a push edi ;0x00825a8f : 57 and eax , 01h ;0x00825a90 : 83e001 push eax ;0x00825a93 : 50 mov dl , 07Bh ;0x00825a94 : b27b call Fun824553 ;0x00825a96 : e8b8eaffff mov eax , dword ptr [esi] ;0x00825a9b : 8b06 fld qword ptr [ eax + 0390h ] ;0x00825a9d : dd8090030000 push ecx ;0x00825aa3 : 51 push ecx ;0x00825aa4 : 51 fstp qword ptr [ esp ] ;0x00825aa5 : dd1c24 push ebx ;0x00825aa8 : 53 push edi ;0x00825aa9 : 57 push dword ptr [ eax + 0384h ] ;0x00825aaa : ffb084030000 call Fun8247f4 ;0x00825ab0 : e83fedffff mov eax , dword ptr [esi] ;0x00825ab5 : 8b06 push ebx ;0x00825ab7 : 53 push edi ;0x00825ab8 : 57 push dword ptr [ eax + 0388h ] ;0x00825ab9 : ffb088030000 pushd 027h ;0x00825abf : 6a27 call Fun8247a9 ;0x00825ac1 : e8e3ecffff mov eax , dword ptr [esi] ;0x00825ac6 : 8b06 push ebx ;0x00825ac8 : 53 push edi ;0x00825ac9 : 57 push dword ptr [ eax + 038Ch ] ;0x00825aca : ffb08c030000 pushd 043h ;0x00825ad0 : 6a43 call Fun8247a9 ;0x00825ad2 : e8d2ecffff mov eax , dword ptr [esi] ;0x00825ad7 : 8b06 mov ecx , dword ptr [ eax + 0380h ] ;0x00825ad9 : 8b8880030000 push ebx ;0x00825adf : 53 shr ecx , 0Bh ;0x00825ae0 : c1e90b push edi ;0x00825ae3 : 57 and ecx , 01h ;0x00825ae4 : 83e101 push ecx ;0x00825ae7 : 51 push dword ptr [ eax + 0398h ] ;0x00825ae8 : ffb098030000 call Fun82538a ;0x00825aee : e897f8ffff cmp dword ptr [ Data9388c0 ] , 00h ;0x00825af3 : 833dc088930000 je Label825b28 ;0x00825afa : 742c mov eax , ebx ;0x00825afc : 8bc3 and eax , 0FFFFFFFDh ;0x00825afe : 83e0fd push eax ;0x00825b01 : 50 mov eax , dword ptr [esi] ;0x00825b02 : 8b06 push edi ;0x00825b04 : 57 add eax , 039Ch ;0x00825b05 : 059c030000 ; ; -------------------------------------------------------------------- ; VFP 9.0 FIX - SAVING THE SETTING OF SET COLLATE TO MACHINE ; June 2016 ; -------------------------------------------------------------------- ; CCB ; ; We can save the current settings in the Windows registry: ; Tools --> Options ---> Set As Default ; ; For VFP 9.0, the current settings will be saved in the key HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro\9.0\Options. ; For VFP Advanced 32-bit, the current settings will be saved in the key HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro\10.n\Options. ; For VFP Advanced 64-bit, the current settings will be saved in the key HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro64\10.n\Options. ; ; But for the setting of SET COLLATE TO "MACHINE", it will not be saved in the Windows registry (in fact, it will be saved as an empty string). ; ; 2016/6/15, by ccb ; cmp byte ptr [eax],00h jne Label825b0a mov byte ptr [eax][0],"M" mov byte ptr [eax][1],"A" mov byte ptr [eax][2],"C" mov byte ptr [eax][3],"H" mov byte ptr [eax][4],"I" mov byte ptr [eax][5],"N" mov byte ptr [eax][6],"E" mov byte ptr [eax][7],00h Label825b0a :: push eax ;0x00825b0a : 50 mov dl , 06Bh ;0x00825b0b : b26b call Fun8243c7 ;0x00825b0d : e8b5e8ffff mov eax , ebx ;0x00825b12 : 8bc3 and eax , 0FFFFFFFEh ;0x00825b14 : 83e0fe push eax ;0x00825b17 : 50 mov eax , dword ptr [esi] ;0x00825b18 : 8b06 push edi ;0x00825b1a : 57 add eax , 039Ch ;0x00825b1b : 059c030000 push eax ;0x00825b20 : 50 mov dl , 06Bh ;0x00825b21 : b26b call Fun82446d ;0x00825b23 : e845e9ffff 4. APPLIES TO: VFP 6.0.8167.0 VFP 6.0.8961.0 (SP5) VFP 7.0.0.9262 VFP 7.0.0.9465 (SP1) VFP 8.0.0.2521 VFP 8.0.0.3117 (SP1) VFP 9.0.0.2412 VFP 9.0.0.3504 (SP1) VFP 9.0.0.4611 (SP2) VFP 9.0.0.5015 (SP2) VFP 9.0.0.5411 (SP2) VFP 9.0.0.5721 (SP2) VFP 9.0.0.5815 (SP2) VFP 9.0.0.6303 (SP2) VFP 9.0.0.6602 (SP2) VFP 9.0.0.7423 (SP2) The bug has been fixed in VFP Advanced. 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com 2, microsoft.com: https://social.msdn.microsoft.com/Forums/en-US/6190c572-399a-41c4-9910-c6f737019bb2/index-problem-of-vfp-6-application-running-on-both-xp-and-vista 3, tech-archive.net: http://www.tech-archive.net/Archive/Fox/microsoft.public.fox.programmer.exchange/2007-11/msg00478.html 4, sunyear.com.tw: http://vfp.sunyear.com.tw/viewtopic.php?t=6686 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |