--------------------------------------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND November 2024 --------------------------------------------------------------------------------------------------------- CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), for the ACTIVATE POPUP command, sometimes VFP will enter an infinite loop. The bug was reported by Matt Peirse. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun78fd80 :: ; proc near push ebp ;0x0078fd80 : 55 mov ebp , esp ;0x0078fd81 : 8bec ; ; ---------------------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND ; November 2024 ; ---------------------------------------------------------------------------------------------- ; CCB ; ; In vfp9, for the ACTIVATE POPUP command, ; sometimes VFP will enter an infinite loop. ; In VFP Advanced, for the ACTIVATE POPUP command, ; when the number of mouse move events > the maximum number of mouse move events, VFP will exit loop. ; ; 2024/11/20, by ccb ; ; sub esp , 0C8h ;0x0078fd83 : 81ecc8000000 sub esp , 0D8h ;0x0078fd83 : 81ecc8000000 xor eax , eax mov dword ptr [ ebp - 0D8h ][00h] , eax mov dword ptr [ ebp - 0D8h ][04h] , eax mov dword ptr [ ebp - 0D8h ][08h] , eax mov dword ptr [ ebp - 0D8h ][0Ch] , eax mov eax , dword ptr [ ebp + 40 ] ;0x0078fd89 : 8b4528 mov eax , dword ptr [eax] ;0x0078fd8c : 8b00 and dword ptr [ ebp - 16 ] , 00h ;0x0078fd8e : 8365f000 push ebx ;0x0078fd92 : 53 push esi ;0x0078fd93 : 56 xor ecx , ecx ;0x0078fd94 : 33c9 push edi ;0x0078fd96 : 57 mov edi , dword ptr [ ebp + 32 ] ;0x0078fd97 : 8b7d20 mov esi , dword ptr [edi] ;0x0078fd9a : 8b37 inc ecx ;0x0078fd9c : 41 cmp dword ptr [ eax + 64 ] , ecx ;0x0078fd9d : 394840 mov dword ptr [ ebp - 64 ] , ecx ;0x0078fda0 : 894dc0 mov dword ptr [ ebp - 40 ] , esi ;0x0078fda3 : 8975d8 je Label78fdbe ;0x0078fda6 : 7416 push dword ptr [ ebp + 48 ] ;0x0078fda8 : ff7530 lea ebx , dword ptr [ ebp + 40 ] ;0x0078fdab : 8d5d28 push dword ptr [ ebp + 44 ] ;0x0078fdae : ff752c call Fun78f59e ;0x0078fdb1 : e8e8f7ffff test eax , eax ;0x0078fdb6 : 85c0 je Label78ff03 ;0x0078fdb8 : 0f8445010000 Label78fdbe :: mov eax , dword ptr [esi] ;0x0078fdbe : 8b06 xor ebx , ebx ;0x0078fdc0 : 33db test byte ptr [ eax + 12 ] , 02h ;0x0078fdc2 : f6400c02 jne Label78fe8a ;0x0078fdc6 : 0f85be000000 mov ecx , dword ptr [ ebp + 8 ] ;0x0078fdcc : 8b4d08 cmp ecx , ebx ;0x0078fdcf : 3bcb jne Label78fdf1 ;0x0078fdd1 : 751e test byte ptr [ eax + 14 ] , 01h ;0x0078fdd3 : f6400e01 jne Label78fdf1 ;0x0078fdd7 : 7518 test byte ptr [ eax + 13 ] , 08h ;0x0078fdd9 : f6400d08 jne Label78fdeb ;0x0078fddd : 750c cmp word ptr [ eax + 4 ] , bx ;0x0078fddf : 66395804 je Label78fdeb ;0x0078fde3 : 7406 test byte ptr [ eax + 4 ] , 08h ;0x0078fde5 : f6400408 je Label78fdf1 ;0x0078fde9 : 7406 Label78fdeb :: mov ecx , dword ptr [ eax + 52 ] ;0x0078fdeb : 8b4834 mov dword ptr [ ebp + 8 ] , ecx ;0x0078fdee : 894d08 Label78fdf1 :: cmp dword ptr [ eax + 52 ] , ecx ;0x0078fdf1 : 394834 jne Label78fe8a ;0x0078fdf4 : 0f8590000000 cmp dword ptr [ ebp + 12 ] , ebx ;0x0078fdfa : 395d0c jne Label78fe0d ;0x0078fdfd : 750e mov ecx , esi ;0x0078fdff : 8bce call Fun46ef98 ;0x0078fe01 : e892f1cdff mov eax , esi ;0x0078fe06 : 8bc6 call Fun78a762 ;0x0078fe08 : e855a9ffff Label78fe0d :: mov eax , dword ptr [esi] ;0x0078fe0d : 8b06 cmp dword ptr [eax] , 03h ;0x0078fe0f : 833803 jne Label78fe24 ;0x0078fe12 : 7510 cmp dword ptr [ eax + 48 ] , ebx ;0x0078fe14 : 395830 jne Label78fe24 ;0x0078fe17 : 750b push ebx ;0x0078fe19 : 53 or edx , 0FFFFFFFFh ;0x0078fe1a : 83caff mov ecx , esi ;0x0078fe1d : 8bce call Fun416bd8 ;0x0078fe1f : e8b46dc8ff Label78fe24 :: mov eax , dword ptr [edi] ;0x0078fe24 : 8b07 mov ecx , dword ptr [ ebp + 36 ] ;0x0078fe26 : 8b4d24 mov dword ptr [ecx] , eax ;0x0078fe29 : 8901 call Fun546455 ;0x0078fe2b : e82566dbff mov edx , dword ptr [esi] ;0x0078fe30 : 8b16 mov ecx , esi ;0x0078fe32 : 8bce call Fun78f575 ;0x0078fe34 : e83cf7ffff mov byte ptr [ edx + 0F9h ] , al ;0x0078fe39 : 8882f9000000 pushd 01h ;0x0078fe3f : 6a01 lea eax , dword ptr [ ebp - 12 ] ;0x0078fe41 : 8d45f4 push eax ;0x0078fe44 : 50 push dword ptr [ ebp + 40 ] ;0x0078fe45 : ff7528 mov eax , esi ;0x0078fe48 : 8bc6 push dword ptr [ ebp + 48 ] ;0x0078fe4a : ff7530 mov dword ptr [ ebp - 56 ] , ebx ;0x0078fe4d : 895dc8 push dword ptr [ ebp + 44 ] ;0x0078fe50 : ff752c call Fun7908a7 ;0x0078fe53 : e84f0a0000 cmp eax , 0FFFFFFFAh ;0x0078fe58 : 83f8fa je Label7903e9 ;0x0078fe5b : 0f8488050000 cmp eax , 0FFFFFFFCh ;0x0078fe61 : 83f8fc je Label78fefc ;0x0078fe64 : 0f8492000000 cmp eax , 02h ;0x0078fe6a : 83f802 je Label78fe91 ;0x0078fe6d : 7422 cmp eax , 06h ;0x0078fe6f : 83f806 jle Label78ff03 ;0x0078fe72 : 0f8e8b000000 cmp eax , 0Bh ;0x0078fe78 : 83f80b jg Label78ff03 ;0x0078fe7b : 0f8f82000000 test byte ptr [ Data9393b0 ] , 02h ;0x0078fe81 : f605b093930002 jne Label78fefc ;0x0078fe88 : 7572 Label78fe8a :: xor eax , eax ;0x0078fe8a : 33c0 jmp Label7903f9 ;0x0078fe8c : e968050000 Label78fe91 :: push dword ptr [ ebp + 48 ] ;0x0078fe91 : ff7530 mov eax , esi ;0x0078fe94 : 8bc6 push dword ptr [ ebp + 44 ] ;0x0078fe96 : ff752c call Fun78fccf ;0x0078fe99 : e831feffff test eax , eax ;0x0078fe9e : 85c0 jne Label7903e9 ;0x0078fea0 : 0f8543050000 mov eax , dword ptr [ ebp + 24 ] ;0x0078fea6 : 8b4518 and dword ptr [eax] , 00h ;0x0078fea9 : 832000 mov eax , dword ptr [ ebp + 20 ] ;0x0078feac : 8b4514 mov ebx , dword ptr [ ebp - 12 ] ;0x0078feaf : 8b5df4 mov dword ptr [eax] , ebx ;0x0078feb2 : 8918 mov eax , dword ptr [esi] ;0x0078feb4 : 8b06 test byte ptr [ eax + 13 ] , 04h ;0x0078feb6 : f6400d04 jne Label78fec2 ;0x0078feba : 7506 test byte ptr [ eax + 16 ] , 010h ;0x0078febc : f6401010 je Label78ff03 ;0x0078fec0 : 7441 Label78fec2 :: mov edx , ebx ;0x0078fec2 : 8bd3 mov ecx , esi ;0x0078fec4 : 8bce call Fun43de2a ;0x0078fec6 : e85fdfcaff cmp dword ptr [ eax + 24 ] , 00h ;0x0078fecb : 83781800 jne Label78ff03 ;0x0078fecf : 7532 mov edi , dword ptr [ ebp + 20 ] ;0x0078fed1 : 8b7d14 push edi ;0x0078fed4 : 57 push dword ptr [ ebp + 16 ] ;0x0078fed5 : ff7510 mov eax , ebx ;0x0078fed8 : 8bc3 mov ecx , esi ;0x0078feda : 8bce call Fun78f9b0 ;0x0078fedc : e8cffaffff mov eax , dword ptr [esi] ;0x0078fee1 : 8b06 test byte ptr [ eax + 16 ] , 010h ;0x0078fee3 : f6401010 jne Label78fef5 ;0x0078fee7 : 750c xor eax , eax ;0x0078fee9 : 33c0 cmp dword ptr [edi] , ebx ;0x0078feeb : 391f sete al ;0x0078feed : 0f94c0 jmp Label7903f9 ;0x0078fef0 : e904050000 Label78fef5 :: mov dword ptr [edi] , ebx ;0x0078fef5 : 891f jmp Label7903e4 ;0x0078fef7 : e9e8040000 Label78fefc :: mov dword ptr [ ebp - 56 ] , 01h ;0x0078fefc : c745c801000000 Label78ff03 :: xor ebx , ebx ;0x0078ff03 : 33db call Fun551e94 ;0x0078ff05 : e88a1fdcff cmp esi , ebx ;0x0078ff0a : 3bf3 mov eax , dword ptr [ ebp + 44 ] ;0x0078ff0c : 8b452c mov dword ptr [ ebp - 36 ] , eax ;0x0078ff0f : 8945dc mov eax , dword ptr [ ebp + 48 ] ;0x0078ff12 : 8b4530 mov dword ptr [ ebp - 52 ] , ebx ;0x0078ff15 : 895dcc mov dword ptr [ ebp - 48 ] , ebx ;0x0078ff18 : 895dd0 mov dword ptr [ ebp - 32 ] , eax ;0x0078ff1b : 8945e0 je Label78ff31 ;0x0078ff1e : 7411 mov eax , dword ptr [ ebp + 36 ] ;0x0078ff20 : 8b4524 cmp dword ptr [eax] , esi ;0x0078ff23 : 3930 jne Label78ff31 ;0x0078ff25 : 750a mov esi , dword ptr [esi] ;0x0078ff27 : 8b36 mov eax , dword ptr [ esi + 60 ] ;0x0078ff29 : 8b463c mov dword ptr [ ebp - 44 ] , eax ;0x0078ff2c : 8945d4 jmp Label78ff34 ;0x0078ff2f : eb03 Label78ff31 :: mov dword ptr [ ebp - 44 ] , ebx ;0x0078ff31 : 895dd4 Label78ff34 :: mov edi , dword ptr [edi] ;0x0078ff34 : 8b3f cmp edi , ebx ;0x0078ff36 : 3bfb je Label78ff3e ;0x0078ff38 : 7404 mov eax , edi ;0x0078ff3a : 8bc7 jmp Label78ff48 ;0x0078ff3c : eb0a Label78ff3e :: mov ecx , dword ptr [ ebp + 8 ] ;0x0078ff3e : 8b4d08 xor edx , edx ;0x0078ff41 : 33d2 call Fun42f404 ;0x0078ff43 : e8bcf4c9ff Label78ff48 :: cmp eax , ebx ;0x0078ff48 : 3bc3 je Label78ff61 ;0x0078ff4a : 7415 mov eax , dword ptr [eax] ;0x0078ff4c : 8b00 mov ecx , dword ptr [ eax + 8 ] ;0x0078ff4e : 8b4808 call Fun78c86e ;0x0078ff51 : e818c9ffff test eax , eax ;0x0078ff56 : 85c0 mov dword ptr [ ebp - 8 ] , 01h ;0x0078ff58 : c745f801000000 jne Label78ff64 ;0x0078ff5f : 7503 Label78ff61 :: mov dword ptr [ ebp - 8 ] , ebx ;0x0078ff61 : 895df8 Label78ff64 :: mov eax , dword ptr [ ebp - 8 ] ;0x0078ff64 : 8b45f8 mov dword ptr [ ebp - 20 ] , eax ;0x0078ff67 : 8945ec mov eax , dword ptr [ Data937fb0 ] ;0x0078ff6a : a1b07f9300 pushd 01h ;0x0078ff6f : 6a01 call Fun48c867 ;0x0078ff71 : e8f1c8cfff lea edx , dword ptr [ ebp - 68 ] ;0x0078ff76 : 8d55bc lea eax , dword ptr [ ebp + 0FFFFFF3Ch ] ;0x0078ff79 : 8d853cffffff call Fun42c27f ;0x0078ff7f : e8fbc2c9ff push ebx ;0x0078ff84 : 53 push eax ;0x0078ff85 : 50 call Fun42c2be ;0x0078ff86 : e833c3c9ff cmp eax , ebx ;0x0078ff8b : 3bc3 pop ecx ;0x0078ff8d : 59 pop ecx ;0x0078ff8e : 59 mov dword ptr [ ebp - 60 ] , eax ;0x0078ff8f : 8945c4 jne Label790350 ;0x0078ff92 : 0f85b8030000 Label78ff98 :: mov eax , dword ptr [ ebp + 16 ] ;0x0078ff98 : 8b4510 push dword ptr [ ebp + 48 ] ;0x0078ff9b : ff7530 mov dword ptr [eax] , ebx ;0x0078ff9e : 8918 mov eax , dword ptr [ ebp + 24 ] ;0x0078ffa0 : 8b4518 push dword ptr [ ebp + 44 ] ;0x0078ffa3 : ff752c mov dword ptr [eax] , ebx ;0x0078ffa6 : 8918 mov eax , dword ptr [ ebp + 28 ] ;0x0078ffa8 : 8b451c mov dword ptr [eax] , ebx ;0x0078ffab : 8918 mov dword ptr [ ebp + 40 ] , ebx ;0x0078ffad : 895d28 lea ebx , dword ptr [ ebp + 40 ] ;0x0078ffb0 : 8d5d28 call Fun78f59e ;0x0078ffb3 : e8e6f5ffff mov edi , eax ;0x0078ffb8 : 8bf8 xor esi , esi ;0x0078ffba : 33f6 cmp edi , esi ;0x0078ffbc : 3bfe mov dword ptr [ ebp - 40 ] , edi ;0x0078ffbe : 897dd8 je Label790179 ;0x0078ffc1 : 0f84b2010000 mov eax , dword ptr [edi] ;0x0078ffc7 : 8b07 mov ecx , dword ptr [ eax + 52 ] ;0x0078ffc9 : 8b4834 cmp ecx , dword ptr [ ebp + 8 ] ;0x0078ffcc : 3b4d08 jne Label790179 ;0x0078ffcf : 0f85a4010000 mov dword ptr [ eax + 48 ] , 02h ;0x0078ffd5 : c7403002000000 mov eax , dword ptr [edi] ;0x0078ffdc : 8b07 mov eax , dword ptr [ eax + 56 ] ;0x0078ffde : 8b4038 cmp eax , 0FFFFFFFFh ;0x0078ffe1 : 83f8ff je Label78ffeb ;0x0078ffe4 : 7405 mov ecx , dword ptr [ ebp + 20 ] ;0x0078ffe6 : 8b4d14 mov dword ptr [ecx] , eax ;0x0078ffe9 : 8901 Label78ffeb :: push dword ptr [ ebp - 56 ] ;0x0078ffeb : ff75c8 lea eax , dword ptr [ ebp - 12 ] ;0x0078ffee : 8d45f4 push eax ;0x0078fff1 : 50 push dword ptr [ ebp + 40 ] ;0x0078fff2 : ff7528 mov eax , edi ;0x0078fff5 : 8bc7 push dword ptr [ ebp + 48 ] ;0x0078fff7 : ff7530 push dword ptr [ ebp + 44 ] ;0x0078fffa : ff752c call Fun7908a7 ;0x0078fffd : e8a5080000 mov ebx , dword ptr [ ebp + 36 ] ;0x00790002 : 8b5d24 mov dword ptr [ ebp - 28 ] , eax ;0x00790005 : 8945e4 mov eax , dword ptr [ebx] ;0x00790008 : 8b03 cmp eax , esi ;0x0079000a : 3bc6 je Label790082 ;0x0079000c : 7474 cmp eax , edi ;0x0079000e : 3bc7 je Label790031 ;0x00790010 : 741f mov eax , dword ptr [eax] ;0x00790012 : 8b00 mov dword ptr [ eax + 48 ] , esi ;0x00790014 : 897030 mov ecx , dword ptr [ebx] ;0x00790017 : 8b0b mov eax , dword ptr [ecx] ;0x00790019 : 8b01 cmp dword ptr [ eax + 0CCh ] , esi ;0x0079001b : 39b0cc000000 jne Label79002c ;0x00790021 : 7509 push esi ;0x00790023 : 56 or edx , 0FFFFFFFFh ;0x00790024 : 83caff call Fun416bd8 ;0x00790027 : e8ac6bc8ff Label79002c :: mov dword ptr [ ebp - 16 ] , esi ;0x0079002c : 8975f0 jmp Label790082 ;0x0079002f : eb51 Label790031 :: mov eax , dword ptr [edi] ;0x00790031 : 8b07 cmp dword ptr [eax] , 01h ;0x00790033 : 833801 jne Label790082 ;0x00790036 : 754a cmp dword ptr [ eax + 0CCh ] , esi ;0x00790038 : 39b0cc000000 je Label790082 ;0x0079003e : 7442 mov ecx , dword ptr [ ebp - 12 ] ;0x00790040 : 8b4df4 cmp ecx , dword ptr [ eax + 56 ] ;0x00790043 : 3b4838 je Label790082 ;0x00790046 : 743a mov eax , dword ptr [ ebp - 36 ] ;0x00790048 : 8b45dc cmp dword ptr [ ebp + 44 ] , eax ;0x0079004b : 39452c je Label79005d ;0x0079004e : 740d call Fun42e3f9 ;0x00790050 : e8a4e3c9ff mov dword ptr [ ebp - 52 ] , eax ;0x00790055 : 8945cc mov dword ptr [ ebp - 48 ] , edx ;0x00790058 : 8955d0 jmp Label79007b ;0x0079005b : eb1e Label79005d :: call Fun42e3f9 ;0x0079005d : e897e3c9ff mov esi , dword ptr [ ebp - 52 ] ;0x00790062 : 8b75cc mov ecx , dword ptr [ ebp - 48 ] ;0x00790065 : 8b4dd0 add esi , 0C8h ;0x00790068 : 81c6c8000000 adc ecx , 00h ;0x0079006e : 83d100 cmp edx , ecx ;0x00790071 : 3bd1 jg Label790082 ;0x00790073 : 7f0d jl Label79007b ;0x00790075 : 7c04 cmp eax , esi ;0x00790077 : 3bc6 jnb Label790082 ;0x00790079 : 7307 Label79007b :: mov dword ptr [ ebp - 28 ] , 0FFFFFFFBh ;0x0079007b : c745e4fbffffff Label790082 :: mov ecx , dword ptr [ ebp + 24 ] ;0x00790082 : 8b4d18 mov edx , dword ptr [ ebp - 28 ] ;0x00790085 : 8b55e4 mov eax , dword ptr [ ebp + 28 ] ;0x00790088 : 8b451c xor esi , esi ;0x0079008b : 33f6 mov dword ptr [ebx] , edi ;0x0079008d : 893b inc esi ;0x0079008f : 46 xor ebx , ebx ;0x00790090 : 33db cmp edx , 07h ;0x00790092 : 83fa07 mov dword ptr [ecx] , esi ;0x00790095 : 8931 mov dword ptr [eax] , ebx ;0x00790097 : 8918 jg Label79013f ;0x00790099 : 0f8fa0000000 je Label790133 ;0x0079009f : 0f848e000000 cmp edx , 0FFFFFFFCh ;0x007900a5 : 83fafc je Label79011e ;0x007900a8 : 7474 jle Label7901bc ;0x007900aa : 0f8e0c010000 cmp edx , 0FFFFFFFEh ;0x007900b0 : 83fafe jle Label7900f7 ;0x007900b3 : 7e42 cmp edx , 0FFFFFFFFh ;0x007900b5 : 83faff je Label7900db ;0x007900b8 : 7421 cmp edx , 02h ;0x007900ba : 83fa02 jne Label7901bc ;0x007900bd : 0f85f9000000 push dword ptr [ ebp + 16 ] ;0x007900c3 : ff7510 mov eax , dword ptr [ ebp + 20 ] ;0x007900c6 : 8b4514 mov dword ptr [ecx] , ebx ;0x007900c9 : 8919 mov ecx , dword ptr [ ebp - 12 ] ;0x007900cb : 8b4df4 mov dword ptr [ ebp - 16 ] , esi ;0x007900ce : 8975f0 call Fun78f7b5 ;0x007900d1 : e8dff6ffff jmp Label7901bc ;0x007900d6 : e9e1000000 Label7900db :: test byte ptr [ Data9393b0 ] , 02h ;0x007900db : f605b093930002 je Label7901bc ;0x007900e2 : 0f84d4000000 push dword ptr [ ebp - 16 ] ;0x007900e8 : ff75f0 mov eax , edi ;0x007900eb : 8bc7 call Fun78fa8b ;0x007900ed : e899f9ffff jmp Label7901bc ;0x007900f2 : e9c5000000 Label7900f7 :: cmp dword ptr [ ebp - 20 ] , ebx ;0x007900f7 : 395dec je Label790109 ;0x007900fa : 740d test byte ptr [ Data9393b0 ] , 012h ;0x007900fc : f605b093930012 je Label7901bc ;0x00790103 : 0f84b3000000 Label790109 :: push dword ptr [ ebp + 48 ] ;0x00790109 : ff7530 push dword ptr [ ebp + 44 ] ;0x0079010c : ff752c push dword ptr [ ebp - 16 ] ;0x0079010f : ff75f0 push edx ;0x00790112 : 52 push edi ;0x00790113 : 57 call Fun78fb36 ;0x00790114 : e81dfaffff jmp Label7901bc ;0x00790119 : e99e000000 Label79011e :: mov dword ptr [eax] , esi ;0x0079011e : 8930 lea eax , dword ptr [ ebp + 44 ] ;0x00790120 : 8d452c push eax ;0x00790123 : 50 mov eax , dword ptr [ ebp - 12 ] ;0x00790124 : 8b45f4 mov ecx , edi ;0x00790127 : 8bcf call Fun78e471 ;0x00790129 : e843e3ffff jmp Label7901bc ;0x0079012e : e989000000 Label790133 :: pushd 0FFFFFFFFh ;0x00790133 : 6aff Label790135 :: lea esi , dword ptr [ ebp + 44 ] ;0x00790135 : 8d752c call Fun78e3fe ;0x00790138 : e8c1e2ffff jmp Label7901bc ;0x0079013d : eb7d Label79013f :: sub edx , 08h ;0x0079013f : 83ea08 je Label790175 ;0x00790142 : 7431 dec edx ;0x00790144 : 4a je Label79016a ;0x00790145 : 7423 dec edx ;0x00790147 : 4a je Label79015e ;0x00790148 : 7414 dec edx ;0x0079014a : 4a jne Label7901bc ;0x0079014b : 756f push dword ptr [ ebp + 48 ] ;0x0079014d : ff7530 push dword ptr [ ebp + 44 ] ;0x00790150 : ff752c push dword ptr [ ebp + 40 ] ;0x00790153 : ff7528 push edi ;0x00790156 : 57 call Fun78fc39 ;0x00790157 : e8ddfaffff jmp Label7901bc ;0x0079015c : eb5e Label79015e :: mov eax , dword ptr [edi] ;0x0079015e : 8b07 mov ecx , dword ptr [ eax + 64 ] ;0x00790160 : 8b4840 sub ecx , dword ptr [ eax + 60 ] ;0x00790163 : 2b483c dec ecx ;0x00790166 : 49 Label790167 :: push ecx ;0x00790167 : 51 jmp Label790135 ;0x00790168 : ebcb Label79016a :: mov eax , dword ptr [edi] ;0x0079016a : 8b07 mov ecx , dword ptr [ eax + 60 ] ;0x0079016c : 8b483c sub ecx , dword ptr [ eax + 64 ] ;0x0079016f : 2b4840 inc ecx ;0x00790172 : 41 jmp Label790167 ;0x00790173 : ebf2 Label790175 :: pushd 01h ;0x00790175 : 6a01 jmp Label790135 ;0x00790177 : ebbc Label790179 :: push dword ptr [ ebp + 48 ] ;0x00790179 : ff7530 push dword ptr [ ebp + 44 ] ;0x0079017c : ff752c call Fun7854ad ;0x0079017f : e82953ffff test eax , eax ;0x00790184 : 85c0 je Label790192 ;0x00790186 : 740a pushd 04001h ;0x00790188 : 6801400000 call Fun4295f6 ;0x0079018d : e86494c9ff Label790192 :: cmp dword ptr [ ebp - 8 ] , esi ;0x00790192 : 3975f8 jne Label7901bc ;0x00790195 : 7525 mov eax , dword ptr [ ebp + 36 ] ;0x00790197 : 8b4524 mov ebx , dword ptr [eax] ;0x0079019a : 8b18 cmp ebx , esi ;0x0079019c : 3bde je Label7901bc ;0x0079019e : 741c lea eax , dword ptr [ ebp - 64 ] ;0x007901a0 : 8d45c0 push eax ;0x007901a3 : 50 push dword ptr [ ebp - 16 ] ;0x007901a4 : ff75f0 lea eax , dword ptr [ ebp - 12 ] ;0x007901a7 : 8d45f4 push dword ptr [ ebp + 48 ] ;0x007901aa : ff7530 push dword ptr [ ebp + 44 ] ;0x007901ad : ff752c push dword ptr [ ebp - 32 ] ;0x007901b0 : ff75e0 push dword ptr [ ebp - 36 ] ;0x007901b3 : ff75dc push eax ;0x007901b6 : 50 call Fun78f660 ;0x007901b7 : e8a4f4ffff Label7901bc :: mov eax , dword ptr [ ebp + 44 ] ;0x007901bc : 8b452c mov dword ptr [ ebp - 36 ] , eax ;0x007901bf : 8945dc mov eax , dword ptr [ ebp + 48 ] ;0x007901c2 : 8b4530 xor esi , esi ;0x007901c5 : 33f6 cmp dword ptr [ ebp - 20 ] , esi ;0x007901c7 : 3975ec mov dword ptr [ ebp - 32 ] , eax ;0x007901ca : 8945e0 je Label790293 ;0x007901cd : 0f84c0000000 test byte ptr [ Data9393b0 ] , 05Ah ;0x007901d3 : f605b09393005a je Label790293 ;0x007901da : 0f84b3000000 cmp edi , esi ;0x007901e0 : 3bfe mov dword ptr [ ebp - 8 ] , esi ;0x007901e2 : 8975f8 je Label790315 ;0x007901e5 : 0f842a010000 mov eax , dword ptr [edi] ;0x007901eb : 8b07 mov ecx , dword ptr [ eax + 52 ] ;0x007901ed : 8b4834 cmp ecx , dword ptr [ ebp + 8 ] ;0x007901f0 : 3b4d08 jne Label790349 ;0x007901f3 : 0f8550010000 cmp dword ptr [ eax + 0A4h ] , esi ;0x007901f9 : 39b0a4000000 je Label790293 ;0x007901ff : 0f848e000000 lea ecx , dword ptr [ ebp - 116 ] ;0x00790205 : 8d4d8c mov dword ptr [ Data93c2b8 ] , esi ;0x00790208 : 8935b8c29300 call Fun431fa1 ;0x0079020e : e88e1dcaff xor edx , edx ;0x00790213 : 33d2 lea ecx , dword ptr [ ebp - 100 ] ;0x00790215 : 8d4d9c call Fun54ea34 ;0x00790218 : e817e8dbff mov dword ptr [ ebp - 116 ] , 09h ;0x0079021d : c7458c09000000 mov eax , dword ptr [edi] ;0x00790224 : 8b07 mov ebx , 0100h ;0x00790226 : bb00010000 test dword ptr [ eax + 16 ] , ebx ;0x0079022b : 855810 je Label790259 ;0x0079022e : 7429 mov ecx , dword ptr [ eax + 0A4h ] ;0x00790230 : 8b88a4000000 cmp ecx , esi ;0x00790236 : 3bce je Label790244 ;0x00790238 : 740a mov ecx , dword ptr [ecx] ;0x0079023a : 8b09 mov eax , dword ptr [ eax + 0E4h ] ;0x0079023c : 8b80e4000000 mov dword ptr [ecx] , eax ;0x00790242 : 8901 Label790244 :: mov eax , dword ptr [edi] ;0x00790244 : 8b07 mov eax , dword ptr [ eax + 0A4h ] ;0x00790246 : 8b80a4000000 cmp eax , esi ;0x0079024c : 3bc6 je Label790259 ;0x0079024e : 7409 mov eax , dword ptr [eax] ;0x00790250 : 8b00 mov dword ptr [ eax + 32 ] , offset Label8c4bb5 ;0x00790252 : c74020b54b8c00 Label790259 :: mov eax , dword ptr [edi] ;0x00790259 : 8b07 push dword ptr [ eax + 0A4h ] ;0x0079025b : ffb0a4000000 lea eax , dword ptr [ ebp - 116 ] ;0x00790261 : 8d458c call Fun785581 ;0x00790264 : e81853ffff mov ecx , dword ptr [edi] ;0x00790269 : 8b0f cmp dword ptr [ecx] , 01h ;0x0079026b : 833901 jne Label790278 ;0x0079026e : 7508 cmp dword ptr [ ecx + 0E4h ] , esi ;0x00790270 : 39b1e4000000 je Label79027b ;0x00790276 : 7403 Label790278 :: mov dword ptr [ ebp - 8 ] , eax ;0x00790278 : 8945f8 Label79027b :: test dword ptr [ ecx + 16 ] , ebx ;0x0079027b : 855910 je Label790293 ;0x0079027e : 7413 mov ecx , dword ptr [ ecx + 0A4h ] ;0x00790280 : 8b89a4000000 cmp ecx , esi ;0x00790286 : 3bce je Label790293 ;0x00790288 : 7409 mov eax , dword ptr [ecx] ;0x0079028a : 8b01 mov dword ptr [ eax + 32 ] , offset Label456d23 ;0x0079028c : c74020236d4500 Label790293 :: cmp edi , esi ;0x00790293 : 3bfe je Label790315 ;0x00790295 : 747e movzx ebx ,byte ptr [ Data9370dc ] ;0x00790297 : 0fb61ddc709300 mov byte ptr [ Data9370dc ] , 01h ;0x0079029e : c605dc70930001 jmp Label7902f7 ;0x007902a5 : eb50 Label7902a7 :: mov eax , dword ptr [edi] ;0x007902a7 : 8b07 cmp dword ptr [ eax + 09Ch ] , esi ;0x007902a9 : 39b09c000000 je Label7902c1 ;0x007902af : 7410 test byte ptr [ eax + 17 ] , 040h ;0x007902b1 : f6401140 jne Label7902c1 ;0x007902b5 : 750a lea ecx , dword ptr [ ebp - 116 ] ;0x007902b7 : 8d4d8c call Fun4d7a99 ;0x007902ba : e8da77d4ff jmp Label7902f7 ;0x007902bf : eb36 Label7902c1 :: push esi ;0x007902c1 : 56 push dword ptr [ ebp - 96 ] ;0x007902c2 : ff75a0 push dword ptr [ ebp - 100 ] ;0x007902c5 : ff759c call Fun791139 ;0x007902c8 : e86c0e0000 cmp dword ptr [ Data937fbc ] , esi ;0x007902cd : 3935bc7f9300 je Label7902f7 ;0x007902d3 : 7422 mov eax , dword ptr [edi] ;0x007902d5 : 8b07 test byte ptr [ eax + 12 ] , 080h ;0x007902d7 : f6400c80 je Label7902f7 ;0x007902db : 741a push dword ptr [ eax + 0A4h ] ;0x007902dd : ffb0a4000000 lea eax , dword ptr [ ebp - 100 ] ;0x007902e3 : 8d459c call Fun8f7eb4 ;0x007902e6 : e8c97b1600 test eax , eax ;0x007902eb : 85c0 jne Label7902f7 ;0x007902ed : 7508 lea eax , dword ptr [ ebp - 116 ] ;0x007902ef : 8d458c call Fun48d21f ;0x007902f2 : e828cfcfff Label7902f7 :: pushd 01h ;0x007902f7 : 6a01 lea eax , dword ptr [ ebp - 116 ] ;0x007902f9 : 8d458c push eax ;0x007902fc : 50 pushd 010h ;0x007902fd : 6a10 pop eax ;0x007902ff : 58 pushd 0Fh ;0x00790300 : 6a0f pop ecx ;0x00790302 : 59 call Fun49f897 ;0x00790303 : e88ff5d0ff test eax , eax ;0x00790308 : 85c0 jne Label7902a7 ;0x0079030a : 759b cmp ebx , esi ;0x0079030c : 3bde jne Label790315 ;0x0079030e : 7505 mov byte ptr [ Data9370dc ] , al ;0x00790310 : a2dc709300 Label790315 :: xor ecx , ecx ;0x00790315 : 33c9 call Fun42e42c ;0x00790317 : e810e1c9ff call Fun49dafa ;0x0079031c : e8d9d7d0ff mov dword ptr [ ebp - 24 ] , eax ;0x00790321 : 8945e8 call Fun4821f7 ;0x00790324 : e8ce1ecfff pushd 01h ;0x00790329 : 6a01 lea eax , dword ptr [ ebp + 44 ] ;0x0079032b : 8d452c push eax ;0x0079032e : 50 call Fun472205 ;0x0079032f : e8d11eceff test eax , eax ;0x00790334 : 85c0 jne Label79033d ;0x00790336 : 7505 cmp dword ptr [ ebp - 8 ] , esi ;0x00790338 : 3975f8 je Label79034c ;0x0079033b : 740f Label79033d :: cmp dword ptr [ ebp - 24 ] , esi ;0x0079033d : 3975e8 jne Label79034c ;0x00790340 : 750a ; ; ---------------------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND ; November 2024 ; ---------------------------------------------------------------------------------------------- ; CCB ; ; In vfp9, for the ACTIVATE POPUP command, ; sometimes VFP will enter an infinite loop. ; In VFP Advanced, for the ACTIVATE POPUP command, ; when the number of mouse move events > the maximum number of mouse move events, VFP will exit loop. ; ; 2024/11/20, by ccb ; mov ecx,dword ptr vfpa_sys9175_data inc dword ptr [ ebp - 0D8h ][00h] cmp dword ptr [ ebp - 0D8h ][00h],ecx jbe Label790342 mov dword ptr [ ebp - 24 ] , 01h jmp Label79034c Label790342 :: xor ebx , ebx ;0x00790342 : 33db jmp Label78ff98 ;0x00790344 : e94ffcffff Label790349 :: mov dword ptr [ ebp - 20 ] , esi ;0x00790349 : 8975ec Label79034c :: xor ebx , ebx ;0x0079034c : 33db jmp Label790353 ;0x0079034e : eb03 Label790350 :: mov edi , dword ptr [ ebp - 40 ] ;0x00790350 : 8b7dd8 Label790353 :: lea eax , dword ptr [ ebp - 68 ] ;0x00790353 : 8d45bc push eax ;0x00790356 : 50 lea eax , dword ptr [ ebp + 0FFFFFF3Ch ] ;0x00790357 : 8d853cffffff call Fun42d200 ;0x0079035d : e89ecec9ff mov eax , dword ptr [ Data937fb0 ] ;0x00790362 : a1b07f9300 push ebx ;0x00790367 : 53 call Fun48c867 ;0x00790368 : e8fac4cfff mov ecx , dword ptr [ ebp - 60 ] ;0x0079036d : 8b4dc4 cmp ecx , ebx ;0x00790370 : 3bcb je Label790379 ;0x00790372 : 7405 call Fun544742 ;0x00790374 : e8c943dbff Label790379 :: cmp dword ptr [ ebp - 20 ] , ebx ;0x00790379 : 395dec je Label7903af ;0x0079037c : 7431 cmp dword ptr [ ebp - 24 ] , ebx ;0x0079037e : 395de8 jne Label7903af ;0x00790381 : 752c pushd 02h ;0x00790383 : 6a02 pushd 0Ah ;0x00790385 : 6a0a pushd 09h ;0x00790387 : 6a09 lea eax , dword ptr [ ebp - 116 ] ;0x00790389 : 8d458c push eax ;0x0079038c : 50 call Fun4b5736 ;0x0079038d : e8a453d2ff pushd 02h ;0x00790392 : 6a02 pushd 09h ;0x00790394 : 6a09 pushd 0Ah ;0x00790396 : 6a0a lea eax , dword ptr [ ebp - 116 ] ;0x00790398 : 8d458c push eax ;0x0079039b : 50 call Fun4b5736 ;0x0079039c : e89553d2ff test eax , eax ;0x007903a1 : 85c0 je Label7903af ;0x007903a3 : 740a push ebx ;0x007903a5 : 53 lea eax , dword ptr [ ebp - 116 ] ;0x007903a6 : 8d458c push eax ;0x007903a9 : 50 call Fun4a107e ;0x007903aa : e8cf0cd1ff Label7903af :: cmp edi , ebx ;0x007903af : 3bfb je Label7903c7 ;0x007903b1 : 7414 mov eax , dword ptr [edi] ;0x007903b3 : 8b07 mov eax , dword ptr [ eax + 60 ] ;0x007903b5 : 8b403c cmp eax , dword ptr [ ebp - 44 ] ;0x007903b8 : 3b45d4 je Label7903c7 ;0x007903bb : 740a cmp dword ptr [ ebp - 24 ] , ebx ;0x007903bd : 395de8 jne Label7903cc ;0x007903c0 : 750a call Fun7916af ;0x007903c2 : e8e8120000 Label7903c7 :: cmp dword ptr [ ebp - 24 ] , ebx ;0x007903c7 : 395de8 je Label7903df ;0x007903ca : 7413 Label7903cc :: mov eax , dword ptr [ ebp + 16 ] ;0x007903cc : 8b4510 mov dword ptr [eax] , ebx ;0x007903cf : 8918 mov eax , dword ptr [ ebp + 24 ] ;0x007903d1 : 8b4518 mov dword ptr [eax] , 01h ;0x007903d4 : c70001000000 mov eax , dword ptr [ ebp + 28 ] ;0x007903da : 8b451c mov dword ptr [eax] , ebx ;0x007903dd : 8918 Label7903df :: mov eax , dword ptr [ ebp + 32 ] ;0x007903df : 8b4520 mov dword ptr [eax] , edi ;0x007903e2 : 8938 Label7903e4 :: xor eax , eax ;0x007903e4 : 33c0 inc eax ;0x007903e6 : 40 jmp Label7903f9 ;0x007903e7 : eb10 Label7903e9 :: push dword ptr [ ebp + 40 ] ;0x007903e9 : ff7528 call Fun78fd55 ;0x007903ec : e864f9ffff mov ecx , dword ptr [ ebp + 24 ] ;0x007903f1 : 8b4d18 xor eax , eax ;0x007903f4 : 33c0 inc eax ;0x007903f6 : 40 mov dword ptr [ecx] , eax ;0x007903f7 : 8901 Label7903f9 :: ; ; ---------------------------------------------------------------------------------------------- ; VFP 9.0 FIX - THE MAXIMUM NUMBER OF MOUSE MOVE EVENTS FOR THE ACTIVATE POPUP COMMAND ; November 2024 ; ---------------------------------------------------------------------------------------------- ; CCB ; ; In vfp9, for the ACTIVATE POPUP command, ; sometimes VFP will enter an infinite loop. ; In VFP Advanced, for the ACTIVATE POPUP command, ; when the number of mouse move events > the maximum number of mouse move events, VFP will exit loop. ; ; 2024/11/20, by ccb ; mov ecx,dword ptr vfpa_sys9175_data cmp dword ptr [ ebp - 0D8h ][00h],ecx jbe Label7903fa xor eax , eax Label7903fa :: pop edi ;0x007903f9 : 5f pop esi ;0x007903fa : 5e pop ebx ;0x007903fb : 5b leave ;0x007903fc : c9 ret 02Ch ;0x007903fd : c22c00 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_vfp9fix360.asp 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |