----------------------------------------------------------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - APPEND THE PATH OF THE FILE CHOSEN IN THE OPEN DIALOG BOX TO THE VISUAL FOXPRO SEARCH PATH October 2024 ----------------------------------------------------------------------------------------------------------------------------- CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), after we choose a file in some open dialog boxes, it will append the path of the file to the Visual FoxPro search path. The bug occurs in the following dialog boxes: LOCFILE() function (Open dialog box) NEWOBJECT() function (Locate class dialog box) MODIFY QUERY | CREATE QUERY command (Locate table file dialog box) MODIFY VIEW | CREATE SQL VIEW - SQL command (Locate table file dialog box) REPORT FORM | LABEL FORM command (Locate image file dialog box) SYSTEM MENU: Table --> Append Records (Locate macimp.app dialog box) DataEnvironment object (Locate database dialog box) IntelliSense Manager (Locate foxcode.dbf dialog box) The bug does not occur in the following dialog boxes: GETDIR() function (Select directory dialog box) GETFILE() function (Open dialog box) GETPICT() function (Open picture dialog box) PUTFILE() function (Save as dialog box) In VFP Advanced, if we disable appending the path of the file chosen in the open dialog box to the Visual FoxPro search path, after we choose a file in some open dialog boxes, it will not append the path of the file to the Visual FoxPro search path. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. CallBack7504c4 :: ; proc near push ebp ;0x007504c4 : 55 mov ebp , esp ;0x007504c5 : 8bec and esp , 0FFFFFFF8h ;0x007504c7 : 83e4f8 sub esp , 053Ch ;0x007504ca : 81ec3c050000 mov eax , dword ptr [ Data937090 ] ;0x007504d0 : a190709300 push ebx ;0x007504d5 : 53 push esi ;0x007504d6 : 56 push edi ;0x007504d7 : 57 mov dword ptr [ esp + 0544h ] , eax ;0x007504d8 : 89842444050000 call Fun420d8c ;0x007504df : e8a808cdff mov ecx , eax ;0x007504e4 : 8bc8 xor eax , eax ;0x007504e6 : 33c0 lea esi , dword ptr [ ecx + 8 ] ;0x007504e8 : 8d7108 mov dword ptr [ esp + 20 ] , ecx ;0x007504eb : 894c2414 mov dword ptr [ esp + 36 ] , eax ;0x007504ef : 89442424 mov dword ptr [ esp + 32 ] , eax ;0x007504f3 : 89442420 lea ebx , dword ptr [ esp + 0138h ] ;0x007504f7 : 8d9c2438010000 mov dword ptr [ esp + 24 ] , esi ;0x007504fe : 89742418 mov dword ptr [ esp + 28 ] , esi ;0x00750502 : 8974241c Label750506 :: cmp dword ptr [ Data936f1c ] , eax ;0x00750506 : 39051c6f9300 mov byte ptr [ebx] , 00h ;0x0075050c : c60300 jle Label750549 ;0x0075050f : 7e38 lea eax , dword ptr [ esi - 8 ] ;0x00750511 : 8d46f8 call Fun42371d ;0x00750514 : e80432cdff mov ecx , dword ptr [esi] ;0x00750519 : 8b0e mov eax , 0FFh ;0x0075051b : b8ff000000 cmp ecx , eax ;0x00750520 : 3bc8 ja Label750526 ;0x00750522 : 7702 mov eax , ecx ;0x00750524 : 8bc1 Label750526 :: mov edx , dword ptr [ esi + 24 ] ;0x00750526 : 8b5618 mov esi , dword ptr [edx] ;0x00750529 : 8b32 mov ecx , eax ;0x0075052b : 8bc8 mov edx , ecx ;0x0075052d : 8bd1 shr ecx , 02h ;0x0075052f : c1e902 mov edi , ebx ;0x00750532 : 8bfb rep movsd ;0x00750534 : f3a5 mov ecx , edx ;0x00750536 : 8bca and ecx , 03h ;0x00750538 : 83e103 rep movsb ;0x0075053b : f3a4 mov esi , dword ptr [ esp + 28 ] ;0x0075053d : 8b74241c mov byte ptr [ eax + ebx ] , 00h ;0x00750541 : c6041800 mov eax , dword ptr [ esp + 32 ] ;0x00750545 : 8b442420 Label750549 :: inc eax ;0x00750549 : 40 add esi , 02Ch ;0x0075054a : 83c62c add ebx , 0101h ;0x0075054d : 81c301010000 cmp eax , 04h ;0x00750553 : 83f804 mov dword ptr [ esp + 32 ] , eax ;0x00750556 : 89442420 mov dword ptr [ esp + 28 ] , esi ;0x0075055a : 8974241c jl Label750506 ;0x0075055e : 7ca6 mov al , byte ptr [ esp + 043Bh ] ;0x00750560 : 8a84243b040000 test al , al ;0x00750567 : 84c0 jne Label750576 ;0x00750569 : 750b mov dword ptr [ esp + 043Bh ] , 00h ;0x0075056b : c784243b04000000000000 Label750576 :: mov al , byte ptr [ esp + 0239h ] ;0x00750576 : 8a842439020000 test al , al ;0x0075057d : 84c0 mov dword ptr [ esp + 16 ] , 00h ;0x0075057f : c744241000000000 je Label750600 ;0x00750587 : 7477 lea eax , dword ptr [ esp + 16 ] ;0x00750589 : 8d442410 push eax ;0x0075058d : 50 lea ecx , dword ptr [ esp + 013Ch ] ;0x0075058e : 8d8c243c010000 push ecx ;0x00750595 : 51 lea edx , dword ptr [ esp + 56 ] ;0x00750596 : 8d542438 push edx ;0x0075059a : 52 lea eax , dword ptr [ esp + 0245h ] ;0x0075059b : 8d842445020000 push eax ;0x007505a2 : 50 call Fun74c904 ;0x007505a3 : e85cc3ffff test eax , eax ;0x007505a8 : 85c0 je Label7508d8 ;0x007505aa : 0f8428030000 mov eax , dword ptr [ esp + 16 ] ;0x007505b0 : 8b442410 test eax , eax ;0x007505b4 : 85c0 je Label7505f9 ;0x007505b6 : 7441 xor edx , edx ;0x007505b8 : 33d2 lea ecx , dword ptr [ esp + 48 ] ;0x007505ba : 8d4c2430 call Fun43d2bf ;0x007505be : e8fcccceff mov esi , eax ;0x007505c3 : 8bf0 test esi , esi ;0x007505c5 : 85f6 je Label7505f1 ;0x007505c7 : 7428 mov ecx , dword ptr [esi] ;0x007505c9 : 8b0e pushd 00h ;0x007505cb : 6a00 pushd 05Ch ;0x007505cd : 6a5c pushd 0100h ;0x007505cf : 6800010000 lea edx , dword ptr [ esp + 0144h ] ;0x007505d4 : 8d942444010000 call Fun43d33e ;0x007505db : e85ecdceff mov ecx , esi ;0x007505e0 : 8bce call Fun42c1e2 ;0x007505e2 : e8fbbbcdff mov eax , 08000h ;0x007505e7 : b800800000 jmp Label75067c ;0x007505ec : e98b000000 Label7505f1 :: mov byte ptr [ esp + 0138h ] , 00h ;0x007505f1 : c684243801000000 Label7505f9 :: mov eax , 08000h ;0x007505f9 : b800800000 jmp Label75067c ;0x007505fe : eb7c Label750600 :: xor ebx , ebx ;0x00750600 : 33db lea edx , dword ptr [ esp + 0138h ] ;0x00750602 : 8d942438010000 lea edi , dword ptr [ esp + 48 ] ;0x00750609 : 8d7c2430 call Fun74c83d ;0x0075060d : e82bc2ffff cmp eax , 01h ;0x00750612 : 83f801 mov dword ptr [ esp + 16 ] , eax ;0x00750615 : 89442410 jne Label750651 ;0x00750619 : 7536 xor edx , edx ;0x0075061b : 33d2 mov ecx , edi ;0x0075061d : 8bcf call Fun43d2bf ;0x0075061f : e89bccceff mov esi , eax ;0x00750624 : 8bf0 test esi , esi ;0x00750626 : 85f6 je Label750649 ;0x00750628 : 741f mov ecx , dword ptr [esi] ;0x0075062a : 8b0e push ebx ;0x0075062c : 53 pushd 05Ch ;0x0075062d : 6a5c pushd 0100h ;0x0075062f : 6800010000 lea edx , dword ptr [ esp + 0144h ] ;0x00750634 : 8d942444010000 call Fun43d33e ;0x0075063b : e8feccceff mov ecx , esi ;0x00750640 : 8bce call Fun42c1e2 ;0x00750642 : e89bbbcdff jmp Label750651 ;0x00750647 : eb08 Label750649 :: mov byte ptr [ esp + 0138h ] , 00h ;0x00750649 : c684243801000000 Label750651 :: lea eax , dword ptr [ esp + 0239h ] ;0x00750651 : 8d842439020000 mov esi , offset Data91fb38 ;0x00750658 : be38fb9100 mov ecx , eax ;0x0075065d : 8bc8 mov edx , 0100h ;0x0075065f : ba00010000 sub esi , ecx ;0x00750664 : 2bf1 Label750666 :: mov cl , byte ptr [ esi + eax ] ;0x00750666 : 8a0c06 dec edx ;0x00750669 : 4a test cl , cl ;0x0075066a : 84c9 je Label750675 ;0x0075066c : 7407 mov byte ptr [eax] , cl ;0x0075066e : 8808 inc eax ;0x00750670 : 40 test edx , edx ;0x00750671 : 85d2 ja Label750666 ;0x00750673 : 77f1 Label750675 :: mov byte ptr [eax] , 00h ;0x00750675 : c60000 mov eax , dword ptr [ esp + 36 ] ;0x00750678 : 8b442424 Label75067c :: mov ecx , dword ptr [ esp + 16 ] ;0x0075067c : 8b4c2410 test ecx , ecx ;0x00750680 : 85c9 jne Label750742 ;0x00750682 : 0f85ba000000 mov ecx , dword ptr [ esp + 043Bh ] ;0x00750688 : 8b8c243b040000 lea edx , dword ptr [ esp + 0138h ] ;0x0075068f : 8d942438010000 push edx ;0x00750696 : 52 pushd 00h ;0x00750697 : 6a00 pushd 00h ;0x00750699 : 6a00 pushd 00h ;0x0075069b : 6a00 push ecx ;0x0075069d : 51 pushd offset Data91aed0 ;0x0075069e : 68d0ae9100 push eax ;0x007506a3 : 50 pushd 00h ;0x007506a4 : 6a00 lea edx , dword ptr [ esp + 0259h ] ;0x007506a6 : 8d942459020000 push edx ;0x007506ad : 52 pushd 00h ;0x007506ae : 6a00 lea edx , dword ptr [ esp + 88 ] ;0x007506b0 : 8d542458 lea ecx , dword ptr [ esp + 0362h ] ;0x007506b4 : 8d8c2462030000 call Fun7a0587 ;0x007506bb : e8c7fe0400 test eax , eax ;0x007506c0 : 85c0 jne Label7506ec ;0x007506c2 : 7528 test byte ptr [ Data936f10 ] , 01h ;0x007506c4 : f605106f930001 je Label7506e2 ;0x007506cb : 7415 mov eax , dword ptr [ Data936f14 ] ;0x007506cd : a1146f9300 test eax , eax ;0x007506d2 : 85c0 jne Label750742 ;0x007506d4 : 756c mov dword ptr [ Data936f14 ] , 078h ;0x007506d6 : c705146f930078000000 jmp Label750742 ;0x007506e0 : eb60 Label7506e2 :: mov ecx , 078h ;0x007506e2 : b978000000 call Fun544742 ;0x007506e7 : e85640dfff Label7506ec :: xor edx , edx ;0x007506ec : 33d2 lea ecx , dword ptr [ esp + 48 ] ;0x007506ee : 8d4c2430 call Fun43d2bf ;0x007506f2 : e8c8cbceff mov esi , dword ptr [eax] ;0x007506f7 : 8b30 mov ecx , esi ;0x007506f9 : 8bce lea edi , dword ptr [ ecx + 1 ] ;0x007506fb : 8d7901 nop ;0x007506fe : 90 Label7506ff :: mov dl , byte ptr [ecx] ;0x007506ff : 8a11 inc ecx ;0x00750701 : 41 test dl , dl ;0x00750702 : 84d2 jne Label7506ff ;0x00750704 : 75f9 sub ecx , edi ;0x00750706 : 2bcf inc ecx ;0x00750708 : 41 mov edx , ecx ;0x00750709 : 8bd1 shr ecx , 02h ;0x0075070b : c1e902 lea edi , dword ptr [ esp + 0138h ] ;0x0075070e : 8dbc2438010000 rep movsd ;0x00750715 : f3a5 mov ecx , edx ;0x00750717 : 8bca and ecx , 03h ;0x00750719 : 83e103 rep movsb ;0x0075071c : f3a4 mov ecx , eax ;0x0075071e : 8bc8 call Fun42c1e2 ;0x00750720 : e8bdbacdff lea eax , dword ptr [ esp + 48 ] ;0x00750725 : 8d442430 push eax ;0x00750729 : 50 lea ecx , dword ptr [ esp + 48 ] ;0x0075072a : 8d4c2430 push ecx ;0x0075072e : 51 call Fun434bcf ;0x0075072f : e89b44ceff ; ; ------------------------------------------------------------------------------------------------------------------ ; VFP 9.0 FIX - APPEND THE PATH OF THE FILE CHOSEN IN THE OPEN DIALOG BOX TO THE VISUAL FOXPRO SEARCH PATH ; October 2024 ; ------------------------------------------------------------------------------------------------------------------ ; CCB ; ; Append the path of the file chosen in the open dialog box to the Visual FoxPro search path. ; LOCFILE() function (Open dialog box). ; ; 2024/10/11, by ccb ; cmp dword ptr vfpa_sys917401_data,00h je Label750742 mov eax , offset Data93a8c0 ;0x00750734 : b8c0a89300 lea ecx , dword ptr [ esp + 44 ] ;0x00750739 : 8d4c242c call Fun409834 ;0x0075073d : e8f290cbff Label750742 :: mov dl , byte ptr [ Data9428dc ] ;0x00750742 : 8a15dc289400 xor dl , 01h ;0x00750748 : 80f201 je Label750874 ;0x0075074b : 0f8423010000 mov ecx , dword ptr [ Data9388cc ] ;0x00750751 : 8b0dcc889300 mov al , byte ptr [ Data9388c8 ] ;0x00750757 : a0c8889300 inc ecx ;0x0075075c : 41 test al , al ;0x0075075d : 84c0 mov dword ptr [ Data9388cc ] , ecx ;0x0075075f : 890dcc889300 je Label75077c ;0x00750765 : 7415 lea eax , dword ptr [ esp + 36 ] ;0x00750767 : 8d442424 push eax ;0x0075076b : 50 call GetCursorPos ;0x0075076c : ff1580759100 mov ecx , dword ptr [ esp + 36 ] ;0x00750772 : 8b4c2424 mov eax , dword ptr [ esp + 40 ] ;0x00750776 : 8b442428 jmp Label750782 ;0x0075077a : eb06 Label75077c :: or eax , 0FFFFFFFFh ;0x0075077c : 83c8ff or ecx , 0FFFFFFFFh ;0x0075077f : 83c9ff Label750782 :: push eax ;0x00750782 : 50 push ecx ;0x00750783 : 51 call WindowFromPoint ;0x00750784 : ff156c739100 test eax , eax ;0x0075078a : 85c0 je Label7507b9 ;0x0075078c : 742b mov edi , eax ;0x0075078e : 8bf8 call Fun42e58e ;0x00750790 : e8f9ddcdff test eax , eax ;0x00750795 : 85c0 je Label7507b9 ;0x00750797 : 7420 mov al , byte ptr [ Data9388c8 ] ;0x00750799 : a0c8889300 test al , al ;0x0075079e : 84c0 je Label7507b9 ;0x007507a0 : 7417 mov eax , dword ptr [ Data942ab8 ] ;0x007507a2 : a1b82a9400 test eax , eax ;0x007507a7 : 85c0 jne Label7507b3 ;0x007507a9 : 7508 pushd 00h ;0x007507ab : 6a00 call ShowCursor ;0x007507ad : ff1568759100 Label7507b3 :: inc dword ptr [ Data942ab8 ] ;0x007507b3 : ff05b82a9400 Label7507b9 :: call Fun5525a2 ;0x007507b9 : e8e41de0ff mov ecx , dword ptr [ Data93956c ] ;0x007507be : 8b0d6c959300 test ecx , ecx ;0x007507c4 : 85c9 je Label7507e2 ;0x007507c6 : 741a mov edx , dword ptr [ecx] ;0x007507c8 : 8b11 mov eax , dword ptr [ edx + 68 ] ;0x007507ca : 8b4244 test eax , 0400000h ;0x007507cd : a900004000 jne Label7507e2 ;0x007507d2 : 750e test al , 01h ;0x007507d4 : a801 je Label7507e2 ;0x007507d6 : 740a mov edx , 01h ;0x007507d8 : ba01000000 call Fun43335f ;0x007507dd : e87d2bceff Label7507e2 :: mov edx , 01h ;0x007507e2 : ba01000000 mov ecx , offset Data9395a0 ;0x007507e7 : b9a0959300 call Fun54ea34 ;0x007507ec : e843e2dfff xor ecx , ecx ;0x007507f1 : 33c9 mov dword ptr [ Data939580 ] , ecx ;0x007507f3 : 890d80959300 xor eax , eax ;0x007507f9 : 33c0 mov dword ptr [ Data939584 ] , ecx ;0x007507fb : 890d84959300 mov dword ptr [ Data939590 ] , eax ;0x00750801 : a390959300 mov dword ptr [ Data939588 ] , ecx ;0x00750806 : 890d88959300 mov dword ptr [ Data939594 ] , eax ;0x0075080c : a394959300 mov dword ptr [ Data93958c ] , ecx ;0x00750811 : 890d8c959300 mov ecx , dword ptr [ Data93b9e4 ] ;0x00750817 : 8b0de4b99300 test ecx , ecx ;0x0075081d : 85c9 mov dword ptr [ Data939598 ] , eax ;0x0075081f : a398959300 mov dword ptr [ Data93959c ] , eax ;0x00750824 : a39c959300 je Label75086d ;0x00750829 : 7442 mov eax , dword ptr [ecx] ;0x0075082b : 8b01 test byte ptr [ eax + 12 ] , 010h ;0x0075082d : f6400c10 je Label750845 ;0x00750831 : 7412 mov edx , dword ptr [ Data945944 ] ;0x00750833 : 8b1544599400 pushd 01h ;0x00750839 : 6a01 pushd 07h ;0x0075083b : 6a07 call dword ptr [ eax + 0ACh ] ;0x0075083d : ff90ac000000 jmp Label750859 ;0x00750843 : eb14 Label750845 :: mov ecx , dword ptr [ Data942694 ] ;0x00750845 : 8b0d94269400 test ecx , ecx ;0x0075084b : 85c9 je Label750859 ;0x0075084d : 740a mov edx , 01h ;0x0075084f : ba01000000 call Fun43335f ;0x00750854 : e8062bceff Label750859 :: mov dword ptr [ Data93b9e4 ] , 00h ;0x00750859 : c705e4b9930000000000 mov dword ptr [ Data945944 ] , 0FFFFFFFFh ;0x00750863 : c70544599400ffffffff Label75086d :: mov byte ptr [ Data9428dc ] , 01h ;0x0075086d : c605dc28940001 Label750874 :: lea eax , dword ptr [ esp + 0138h ] ;0x00750874 : 8d842438010000 lea edx , dword ptr [ eax + 1 ] ;0x0075087b : 8d5001 nop ;0x0075087e : 90 Label75087f :: mov cl , byte ptr [eax] ;0x0075087f : 8a08 inc eax ;0x00750881 : 40 test cl , cl ;0x00750882 : 84c9 jne Label75087f ;0x00750884 : 75f9 mov esi , dword ptr [ esp + 20 ] ;0x00750886 : 8b742414 sub eax , edx ;0x0075088a : 2bc2 mov edi , eax ;0x0075088c : 8bf8 call Fun420d46 ;0x0075088e : e8b304cdff test eax , eax ;0x00750893 : 85c0 mov eax , esi ;0x00750895 : 8bc6 je Label7508c5 ;0x00750897 : 742c mov edx , dword ptr [ esp + 24 ] ;0x00750899 : 8b542418 mov dword ptr [edx] , edi ;0x0075089d : 893a mov edx , dword ptr [ eax + 32 ] ;0x0075089f : 8b5020 mov ecx , edi ;0x007508a2 : 8bcf mov byte ptr [eax] , 048h ;0x007508a4 : c60048 mov dword ptr [ eax + 4 ] , 00h ;0x007508a7 : c7400400000000 mov edi , dword ptr [edx] ;0x007508ae : 8b3a mov edx , ecx ;0x007508b0 : 8bd1 shr ecx , 02h ;0x007508b2 : c1e902 lea esi , dword ptr [ esp + 0138h ] ;0x007508b5 : 8db42438010000 rep movsd ;0x007508bc : f3a5 mov ecx , edx ;0x007508be : 8bca and ecx , 03h ;0x007508c0 : 83e103 rep movsb ;0x007508c3 : f3a4 Label7508c5 :: mov ecx , dword ptr [ esp + 24 ] ;0x007508c5 : 8b4c2418 mov eax , dword ptr [ eax + 32 ] ;0x007508c9 : 8b4020 mov edx , dword ptr [ecx] ;0x007508cc : 8b11 mov eax , dword ptr [eax] ;0x007508ce : 8b00 push edx ;0x007508d0 : 52 mov edx , eax ;0x007508d1 : 8bd0 call Fun41ba92 ;0x007508d3 : e8bab1ccff Label7508d8 :: mov ecx , dword ptr [ esp + 0544h ] ;0x007508d8 : 8b8c2444050000 call Fun42bf1d ;0x007508df : e839b6cdff pop edi ;0x007508e4 : 5f pop esi ;0x007508e5 : 5e pop ebx ;0x007508e6 : 5b mov esp , ebp ;0x007508e7 : 8be5 pop ebp ;0x007508e9 : 5d ret ;0x007508ea : c3 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 http://www.baiyujia.com/vfpdocuments/f_vfp9fix356.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix100.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix102.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix103.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix287.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix354.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix355.asp 2, foxite.com: https://www.foxite.com/archives/problem-running-my-exe-0000312433.htm https://www.foxite.com/archives/locfile-to-locate-folders-0000160957.htm 3, tek-tips.com: https://www.tek-tips.com/threads/select-file-and-start-in-specific-directory-vfp-9.1658176/ 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |