------------------------------------------------------------------------------------------------------------------------------ [ENHANCED] VFP 9.0 FIX - SYS(9073) ENABLES OR DISABLES SAVING NEGATIVE COORDINATES FOR THE MAIN VISUAL FOXPRO WINDOW January 2024 ------------------------------------------------------------------------------------------------------------------------------ CCB 1. THE SYS(9073) FUNCTION: SYS(9073) - Enables or disables saving negative coordinates for the main Visual FoxPro window Enables or disables saving negative coordinates for the main Visual FoxPro window. SYS(9073 [, 0 | 1]) Parameters 0 Disables saving negative coordinates for the main Visual FoxPro window. 1 Enables saving negative coordinates for the main Visual FoxPro window. 1 is the startup default for Visual FoxPro Advanced. Return Value Character Remarks The SYS(9073) function is only used in the Visual FoxPro Advanced Interactive Development Environment (IDE). We can set the default value in the Windows registry: HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro\10.n\Options\SaveDesktopNegativeCoordinates (for Visual FoxPro Advanced 32-bit), HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro64\10.n\Options\SaveDesktopNegativeCoordinates (for Visual FoxPro Advanced 64-bit), for example, SaveDesktopNegativeCoordinates = "1". If we enable saving negative coordinates for the main Visual FoxPro window, and the main Visual FoxPro window is shown (_SCREEN.VISIBLE=.T.), vfp will save any (positive, 0, or negative) coordinates in the Windows registry before it exits, for example, [HKEY_CURRENT_USER\Software\Microsoft\VisualFoxPro\10.n\Desktop] "Row"="-100" "Column"="-200" If we disable saving negative coordinates for the main Visual FoxPro window, and the main Visual FoxPro window is shown (_SCREEN.VISIBLE=.T.), vfp will save positive or 0 coordinates in the Windows registry before it exits, if the Top property of the main Visual FoxPro window (_VFP.Top) < 0, vfp will set the value of the registry key "Row" to 0, if the Left property of the main Visual FoxPro window (_VFP.Left) < 0, vfp will set the value of the registry key "Column" to 0. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun529fca :: ; proc near push ebp ;0x00529fca : 55 mov ebp , esp ;0x00529fcb : 8bec pushd 0FFFFFFFFh ;0x00529fcd : 6aff pushd offset Data922268 ;0x00529fcf : 6868229200 pushd offset Label9160f9 ;0x00529fd4 : 68f9609100 mov eax , dword ptr fs:[00h] ;0x00529fd9 : 64a100000000 push eax ;0x00529fdf : 50 mov dword ptr fs:[00h] , esp ;0x00529fe0 : 64892500000000 push ecx ;0x00529fe7 : 51 push ecx ;0x00529fe8 : 51 mov eax , 02FBCh ;0x00529fe9 : b8bc2f0000 call Fun42c118 ;0x00529fee : e82521f0ff mov eax , dword ptr [ Data937090 ] ;0x00529ff3 : a190709300 mov dword ptr [ ebp - 28 ] , eax ;0x00529ff8 : 8945e4 push ebx ;0x00529ffb : 53 push esi ;0x00529ffc : 56 push edi ;0x00529ffd : 57 mov dword ptr [ ebp - 24 ] , esp ;0x00529ffe : 8965e8 xor edi , edi ;0x0052a001 : 33ff mov dword ptr [ ebp + 0FFFFD114h ] , edi ;0x0052a003 : 89bd14d1ffff push edi ;0x0052a009 : 57 pushd 02710h ;0x0052a00a : 6810270000 push edi ;0x0052a00f : 57 mov ebx , dword ptr [ ebp + 8 ] ;0x0052a010 : 8b5d08 mov eax , ebx ;0x0052a013 : 8bc3 call Fun529bc5 ;0x0052a015 : e8abfbffff mov dword ptr [ ebp + 0FFFFD0E4h ] , eax ;0x0052a01a : 8985e4d0ffff mov dword ptr [ ebp + 0FFFFD10Ch ] , edi ;0x0052a020 : 89bd0cd1ffff lea ecx , dword ptr [ ebp + 0FFFFFDE0h ] ;0x0052a026 : 8d8de0fdffff mov dword ptr [ ebp + 0FFFFD100h ] , ecx ;0x0052a02c : 898d00d1ffff mov byte ptr [ ebp + 0FFFFFDE0h ] , 00h ;0x0052a032 : c685e0fdffff00 movsx eax , ax ;0x0052a039 : 0fbfc0 ; ; ------------------------------------------------------------------------------------------------------------------- ; VFP 9.0 FIX - SYS(9073) ENABLES OR DISABLES SAVING NEGATIVE COORDINATES FOR THE MAIN VISUAL FOXPRO WINDOW ; January 2022 ; ------------------------------------------------------------------------------------------------------------------- ; CCB ; ; SYS(9073) - Enables or disables saving negative coordinates for the main Visual FoxPro window. ; ; 2022/1/4, by ccb ; cmp eax,9073 je vfpa_sys9073_start pushd 064h ;0x0052a03c : 6a64 pop esi ;0x0052a03e : 5e cmp eax , esi ;0x0052a03f : 3bc6 jle Label52a0d0 ;0x0052a041 : 0f8e89041000 mov ecx , 07EAh ;0x0052a047 : b9ea070000 cmp eax , ecx ;0x0052a04c : 3bc1 jg Label52a164 ;0x0052a04e : 0f8f10010000 je Label609b33 ;0x0052a054 : 0f84d9fa0d00 mov ecx , 04F6h ;0x0052a05a : b9f6040000 cmp eax , ecx ;0x0052a05f : 3bc1 jle Label52b6e0 ;0x0052a061 : 0f8e79160000 mov ecx , 07DBh ;0x0052a067 : b9db070000 cmp eax , ecx ;0x0052a06c : 3bc1 jg Label51f355 ;0x0052a06e : 0f8fe152ffff je Label609700 ;0x0052a074 : 0f8486f60d00 add ecx , 0FFFFFFF9h ;0x0052a07a : 83c1f9 cmp eax , ecx ;0x0052a07d : 3bc1 jg Label4a4938 ;0x0052a07f : 0f8fb3a8f7ff je Label4f6b07 ;0x0052a085 : 0f847ccafcff sub eax , 04F7h ;0x0052a08b : 2df7040000 je Label60951e ;0x0052a090 : 0f8488f40d00 dec eax ;0x0052a096 : 48 je Label60950f ;0x0052a097 : 0f8472f40d00 sub eax , 0E4h ;0x0052a09d : 2de4000000 je Label609492 ;0x0052a0a2 : 0f84eaf30d00 sub eax , 01F4h ;0x0052a0a8 : 2df4010000 jne Label462026 ;0x0052a0ad : 0f85737ff3ff lea eax , dword ptr [ ebp + 0FFFFFDE0h ] ;0x0052a0b3 : 8d85e0fdffff push eax ;0x0052a0b9 : 50 push dword ptr [ ebp + 12 ] ;0x0052a0ba : ff750c mov edx , ebx ;0x0052a0bd : 8bd3 call Fun4dc923 ;0x0052a0bf : e85f28fbff 4. APPLIES TO: VFP 10 (VFP Advanced) 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix202.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix131.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix132.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix133.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix134.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix135.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix136.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix137.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix138.asp 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |